web-dev-qa-db-fra.com

Affichage du type de message personnalisé sur la première page

J'ai ajouté un nouveau type de message personnalisé à mon thème Wordpress, mais celui-ci refuse de s'afficher sur la page d'accueil. J'ai essayé de mettre

<?php query_posts( array( 'post_type' => array('post', 'reviews') ) );?>

mais cela ne semble pas fonctionner, il boucle juste mes messages normaux. Toute suggestion serait grandement utile.

Voici un pastie de mon index si quelqu'un veut le voir:

http://pastie.org/5120964

1
hiiambo

J'éviterais l'utilisation de query_posts - cela force une autre tentative d'accès à la base de données. Il existe de nombreuses autres façons d’accrocher et de modifier la requête avant que les publications ne soient récupérées. pre_get_posts est l'un d'entre eux.

Pour afficher plusieurs types d'article sur la page d'accueil (pages et articles dans cet exemple):

<?php
add_action('pre_get_posts', 'wpse70606_pre_posts');
/**
 * Change that query! No need to return anything $q is an object passed by 
 * reference {@link http://php.net/manual/en/language.oop5.references.php}.
 *
 * @param   WP_Query $q The query object.
 * @return  void
 */
function wpse70606_pre_posts($q)
{
    // bail if it's the admin, not the main query or isn't the (posts) page.
    if(is_admin() || !$q->is_main_query() || !is_home())
        return;

    // whatever type(s) you want.
    $q->set('post_type', array('post', 'page'));
}

Cela irait dans le fichier functions.php de vos thèmes ou dans un plugin .

3
chrisguitarguy

Je voudrais essayer ceci en premier:

global $wp_query;
$args = array_merge( $wp_query->query, array( 
  'posts_per_page' => -1,
  'post_type' => 'any',
) );

query_posts( $args );

Cela conservera la requête d'origine et affichera chaque message (-1 signifie "tous les messages"), de chaque type de message. Cela devrait vous aider à résoudre le problème.

0
Manu