Obtenir du contenu de page à l'aide de slug

9

J'essaie d'obtenir le contenu de la page lorsque je ne connais que la chaîne de slug.

Existe-t-il une fonction pour cela, ou un moyen facile de le faire ou s'agit-il de le faire via SQL?

Merci beaucoup

Alex
la source

Réponses:

30

Utilisez get_posts()et le paramètre namequi est le slug:

$page = get_posts( array( 'name' => 'your-slug' ) );

if ( $page )
{
    echo $page[0]->post_content;
}

Sachez que le type de message par get_posts()défaut est 'post'. Si vous voulez utiliser une page

$page = get_posts(
    array(
        'name'      => 'your-slug',
        'post_type' => 'page'
    )
);

Si vous souhaitez que tous les types de publication publique (à l'exception des pièces jointes) définissez l'argument de type de publication sur 'any'. Ensuite, vous pouvez obtenir plus d'un résultat car les slugs ne sont pas uniques entre les différents types de publication.

fuxia
la source
4

Vous pouvez obtenir une page par son titre en utilisant la get_page_by_title()fonction.

Vous pouvez l'utiliser comme ceci (en supposant que vous souhaitez afficher le contenu):

$page = get_page_by_title('Your Title'); 
$content = apply_filters('the_content', $page->post_content);
echo $content;

BTW, pour obtenir la page à l'aide de slug:

function get_page_id_by_slug($slug){
    global $wpdb;
    $id = $wpdb->get_var("SELECT ID FROM $wpdb->posts WHERE post_name = '".$slug."'AND post_type = 'page'");
    return $id;
}

$page = get_post(get_page_id_by_slug('my-slug'));
Sisir
la source
4

Si sur la page avec la limace en question

Lisez les balises conditionnelles :
is_page()prend également le slug comme argument.

Par conséquent,

if( is_page( 'your-slug' ) ) {
     // fetch content
}

fera ce que vous voulez.

Si sur une autre page

Si vous souhaitez savoir comment récupérer du contenu de publication / page basé sur un slug lorsqu'il n'est pas sur cette page, vous pouvez également alimenter get_postsun slug. Ceci n'est pas documenté dans le codex.

Ce qui suit récupérera l'ID d'une limace:

$args = array(
    'name' => 'your-slug'
);
$posts_from_slug = get_posts( $args );

// echo fetched content
echo $posts_from_slug[0]->post_content;
Johannes Pille
la source
2

Utilisez get_page_by_path.

Syntaxe

<?php get_page_by_path( $page_path, $output, $post_type ); ?>

Paramètres

Exemple:

//Returns the animal with the slug 'cat'
get_page_by_path('cat', OBJECT, 'animal');

pour plus d'informations, consultez la référence des fonctions WordPress

J'utilise ce code lors du remplissage d'un modèle de thème à partir d'une page,

        $about = get_page_by_path('about'); 
        $content = apply_filters( 'the_content', $about->post_content ); 
        echo $content;
PlanetHackers
la source