web-dev-qa-db-fra.com

Page de publication de blog personnalisée

J'ai trouvé cet exemple ici de création d'une page de blog personnalisée:

http://www.wpbeginner.com/wp-themes/how-to-create-a-custom-homepage-in-wordpress/

1) J'ai créé une page de blog sous Pages> Ajouter un nouveau 2) Sous Modèle, je sélectionne "Blog" 3) Notez que j'ai créé un fichier blog.php dans mon thème personnalisé contenant ce contenu:

<?php
/*
Template Name: Blog
*/
?>
<?php
    echo "Hello World";
    $temp = $wp_query;
    $wp_query= null;
    $wp_query = new WP_Query();
    $wp_query->query('posts_per_page=5'.'&paged='.$paged);
    while ($wp_query->have_posts()) : $wp_query->the_post();
?>

4) Dans Réglages> Lecture, sous "Affichages de la page de couverture", je règle "Page de messages:" sur "Blog".

Maintenant, je regarde ma page de blog dans le navigateur, il rend juste tous mes messages. Mais cela ne fait pas écho au "Hello World" et si je supprime le code de blog.php, cela n’a aucun effet! Il ne fait toujours que rendre tous les messages. Et puis j'essaie d'ajouter une requête personnalisée:

<?php
/*
Template Name: Blog
*/
?>
<?php
    global $wpdb;
    $content = $wpdb->get_row(
        $wpdb->prepare(
            "SELECT * FROM $wpdb->posts
             WHERE post_type = %s
             LIMIT 1
            ",
            'header_post'
        )
    );
    echo $content->post_content; 
?>

Et encore une fois, il ignore cela et rend juste tous les posts avec post_type de post et un post_status de publication.

De toute évidence, le code de mon blog.php est ignoré. Pourquoi?

C’est à quoi il ressemble actuellement (date de publication manquante, commentaire manquant):

http://i49.tinypic.com/2caq0g.jpg

J'ai apporté des modifications à l'index.php dans mon thème:

<?php
$temp = $wp_query;
$wp_query= null;
$wp_query = new WP_Query();
$wp_query->query('posts_per_page=1'.'&paged='.$paged);
while ($wp_query->have_posts()) : $wp_query->the_post();
?>

et toujours aucun effet

1
JohnMerlino

Lorsque vous définissez une page comme page pour les publications, elle ne fonctionne plus comme une page Vanilla, la hiérarchie des modèles dicte un ensemble différent de modèles pour cette page. Votre modèle sélectionné ne semble pas fonctionner, car il n'est pas chargé.

Voir la hiérarchie template pour plus d’informations. Vous devez nommer votre modèle home.php si vous souhaitez qu’il soit utilisé sur la page des publications.

2
Milo

Comme Milo dit, la hiérarchie des modèles détermine le modèle utilisé. Si vous voulez que vos articles de blog aillent sur la page de blog, vous avez 2 options.

  1. Définissez votre page d'accueil sur une page statique et choisissez un blog pour votre page de messages dans la lecture des paramètres. Ensuite, vous devrez apporter vos modifications à index.php. Vous obtiendrez les derniers messages et la page serait nommée blog.

    • Dans ce cas, il ne servirait à rien d'ajouter une requête personnalisée, car WordPress aura déjà interrogé les publications. Vous pouvez ajouter un filtre à pre_get_posts si vous devez modifier cette requête.
  2. Définissez votre page d'accueil sur static et ne choisissez pas de page de blog, puis créez un modèle personnalisé comme vous l'avez fait dans votre exemple de code. Cependant, dans votre exemple de code, il n'est pas vraiment nécessaire de définir $ wp_query sur $ temp. Renommez simplement votre nouveau WP_Query $ my_query ou quelque chose du genre.

1
Chris_O