Est-il possible d'obtenir un lien de page à partir de son slug?

100

Est-il possible d’obtenir le permalien d’une page à partir du slug seul? Je suis conscient que vous pouvez obtenir le lien permanent de la page à partir de l'ID à l'aide de get_page_link() :

<a href="<?php echo get_page_link(40); ?>">Map</a>

Je suis curieux de savoir s'il est possible de faire la même chose avec le slug d'une page - comme ceci:

<a href="<?php echo get_page_link('map'); ?>">Map</a>
    
posée Sampson 07.12.2010 - 18:09
la source

6 réponses

155

Vous parlez de Pages, non? Pas de messages.

Est-ce ce que vous cherchez:

  1. get_permalink( get_page_by_path( 'map' ) )
  2. get_permalink( get_page_by_title( 'Map' ) )
  3. home_url( '/map/' )
réponse donnée zeo 07.12.2010 - 19:19
la source
8

Je pense que cela pourrait être mieux:

function get_page_by_slug($page_slug, $output = OBJECT, $post_type = 'page' ) {
    global $wpdb;
    $page = $wpdb->get_var( $wpdb->prepare( "SELECT ID FROM $wpdb->posts WHERE post_name = %s AND post_type= %s", $page_slug, $post_type ) );
    if ( $page )
            return get_page($page, $output);
    return null;
}

suivant le modèle "d'origine" get_page_by_title de wordpress . (ligne 3173)

rgds

    
réponse donnée Matheus Eduardo 28.02.2011 - 16:21
la source
6

Il s'agit d'une méthode publiée par Tom McFarlin sur son blog :

/**
 * Returns the permalink for a page based on the incoming slug.
 *
 * @param   string  $slug   The slug of the page to which we're going to link.
 * @return  string          The permalink of the page
 * @since   1.0
 */
function wpse_4999_get_permalink_by_slug( $slug, $post_type = '' ) {

    // Initialize the permalink value
    $permalink = null;

    // Build the arguments for WP_Query
    $args = array(
        'name'          => $slug,
        'max_num_posts' => 1
    );

    // If the optional argument is set, add it to the arguments array
    if( '' != $post_type ) {
        $args = array_merge( $args, array( 'post_type' => $post_type ) );
    }

    // Run the query (and reset it)
    $query = new WP_Query( $args );
    if( $query->have_posts() ) {
        $query->the_post();
        $permalink = get_permalink( get_the_ID() );
        wp_reset_postdata();
    }
    return $permalink;
}

Il fonctionne avec les types de publication personnalisés et les types de publication intégrés (tels que post et page ).

    
réponse donnée shea 31.01.2013 - 22:19
la source
1

la réponse acceptée est fausse car les pages hiérarchiques ne fonctionnent pas comme ça. En termes simples, le slug n'est pas toujours le chemin de la page ou de la publication. Par exemple. votre page a un enfant, etc. le chemin sera parent-slug/child-slug et get_page_by_path ne trouvera pas child-slug de cette façon. La solution appropriée est la suivante:

function mycoolprefix_post_by_slug($the_slug, $post_type = "page"){
 $args = array(
   'name'        => $the_slug,
   'post_type'   => $post_type,
   'post_status' => 'publish',
   'numberposts' => 1
 );
 $my_page = get_posts($args)[0];
 return $my_page;
}

<a href="<?php echo mycoolprefix_post_by_slug('map'); ?>">Map</a>
    
réponse donnée Toskan 02.09.2017 - 00:10
la source
0
    function theme_get_permalink_by_title( $title ) {

    // Initialize the permalink value
    $permalink = null;

    // Try to get the page by the incoming title
    $page = get_page_by_title( strtolower( $title ) );

    // If the page exists, then let's get its permalink
    if( null != $page ) {
        $permalink = get_permalink( $page->ID );
    } // end if

    return $permalink;

} // end theme_get_permalink_by_title

Utilisez cette fonction par

if( null == theme_get_permalink_by_title( 'Register For This Site' ) ) {
  // The permalink doesn't exist, so handle this however you best see fit.
} else {
  // The page exists, so do what you need to do.
} // end if/else
    
réponse donnée user46487 11.11.2014 - 05:49
la source
0

Essayez ceci:

<a href="<?php echo get_page_link( get_page_by_path( 'map' ) ); ?>">Map</a>

get_page_by_path( 'path' ) renvoie un objet page / post qui peut ensuite être utilisé par get_page_link() car il accepte un objet post / page et renvoie un lien permanent.

    
réponse donnée Sigma Wadbude 26.02.2018 - 12:54
la source

Lire d'autres questions sur les étiquettes