web-dev-qa-db-fra.com

La fonction permettant d'afficher un type de message personnalisé sur la page d'accueil fait disparaître les éléments de menu

J'ai créé un type de message personnalisé. Cela semble marcher correctement. J'ai cherché le code suivant pour que les types d'articles personnalisés s'affichent dans les autres articles de la page d'accueil du blog:

//add custom post type to front page
add_action( 'pre_get_posts', 'add_my_post_types_to_query' );

function add_my_post_types_to_query( $query ) {
    if ( is_home() && $query->is_main_query() )

    return;
        $query->set( 'post_type', array( 'post', 'reviews' ) );

}

Cependant, ce morceau de code fait en sorte que tous mes éléments de menu disparaissent dans tous les menus. Je n'ai que trois menus: le menu principal, un menu de pied de page et un menu mobile. Je n'ai pas beaucoup d'articles du tout.

Lorsque j'ai supprimé le code ci-dessus de functions.php, les éléments de menu ont réapparu, mais maintenant, mon type de publication personnalisé ne s'affiche pas sur la page d'accueil.

Quelqu'un a-t-il une idée de la raison pour laquelle le code ferait disparaître les éléments de menu?

1
Destiny2Gamer

Voici un aperçu de ce qui se passe avec le code que vous avez posté.

Ce code dit, S'il s'agit de la page d'accueil et que la requête principale est utilisée, ne faites rien .

if ( is_home() && $query->is_main_query() )

return;

Ce n'est pas bon! L'intention est de modifier la requête si nous sommes sur la page d'accueil et si la requête principale est en cours d'exécution.

Ensuite nous avons:

$query->set( 'post_type', array( 'post', 'reviews' ) );

Ce code configure correctement la requête pour obtenir les publications des types de publications post et reviews, mais à cause de l'instruction conditionnelle qui le précède, il va se déclencher pour des requêtes non principales, c'est pourquoi il gâche vos menus. Les menus de navigation et les boucles secondaires n'utilisent pas la requête principale.

Voici une version mise à jour de votre code qui fonctionnera:

add_action( 'pre_get_posts', 'add_my_post_types_to_query' );
function add_my_post_types_to_query( $query ) {
    // Bail if this is not the home page or if it's not the main query.
    if ( ! is_home() && ! $query->is_main_query() ) {
        return;
    }

    $query->set( 'post_type', array( 'post', 'reviews' ) );
}
1
Dave Romsey