Je crée un thème basé sur blankslate/Bootstrap et j'ai un problème avec la navigation principale apparaissant sur les pages de catégories (semble apparaître partout ailleurs ok.).
Dans header.php:
<div class="collapse navbar-collapse" id="navbar-collapse-1">
<?php
wp_nav_menu( array(
'menu' => 'primary',
'theme_location' => 'primary',
'depth' => 2,
'menu_class' => 'nav navbar-nav',
'fallback_cb' => 'wp_bootstrap_navwalker::fallback',
'walker' => new wp_bootstrap_navwalker())
);
?>
Dans Functions.php
// Register Custom Navigation Walker
require_once('wp_bootstrap_navwalker.php');
register_nav_menus( array(
'primary' => __( 'Primary Menu', 'themename' ),
) );
Toute aide ou pointeur serait apprécié
Je sais que cette question est assez ancienne, mais comme il n’ya pas encore de réponse et qu’il existe de nombreuses questions similaires sur les forums d’assistance WordPress, je ferai mieux de partager mes découvertes et d’aider peut-être quelqu'un.
Le problème de la disparition du menu peut être dû à un code inséré dans le plugin ou au thème qui modifie de manière incorrecte l’objet $wp_query
global à l’aide du crochet de filtre pre_get_posts
.
J'ai découvert que le code à l'origine des problèmes était dans le thème:
function namespace_add_custom_types( $query ) {
if( is_category() || is_tag() && empty( $query->query_vars['suppress_filters'] ) ) {
$query->set( 'post_type', array(
'post',
'projects',
));
return $query;
}
}
add_filter( 'pre_get_posts', 'namespace_add_custom_types' );
Cet extrait de code est censé ajouter des types de publication personnalisés aux archives de catégorie, mais il a également affecté la requête dans wp_nav_menu
.
Pour résoudre le problème, je devais corriger la condition if
:
function namespace_add_custom_types( $query ) {
if( is_archive() && (is_category() || is_tag()) && empty( $query->query_vars['suppress_filters'] ) ) {
$query->set( 'post_type', array(
'post',
'projects',
));
return $query;
}
}
add_filter( 'pre_get_posts', 'namespace_add_custom_types' );
YMMV et la cause pourraient être entièrement différents, mais voici comment j'ai résolu le problème du menu manquant dans le modèle de catégorie.
Pour moi
if ($q->get('post_type') != 'post') {
return;
}
dans le gestionnaire de pre_get_posts corrigé.
J'ai eu le même problème parce que j'ajoutais le filtre pre_get_posts
et qu'il me manquait pour passer l'élément de menu à la publication. Voici comment j'ai résolu:
Auparavant, ce code était présent dans le functions.php
de mon thème et je remplaçais la requête principale par le $post_type
uniquement, sans passer par les éléments de menu, et le menu n'apparaissait pas:
add_filter( 'pre_get_posts', 'query_post_type' );
function query_post_type( $query ) {
if ( is_category() ) {
$post_type = get_query_var( 'post_type' );
if ( $post_type ) {
$post_type = $post_type;
} else {
$post_type = array( 'nav_menu_item', 'post', 'departments' );
}
$query->set( 'post_type', $post_type );
return $query;
}
}
Et j'ai résolu en passant le 'nav_menu_item'
comme suit:
add_filter( 'pre_get_posts', 'query_post_type' );
function query_post_type( $query ) {
if ( is_category() ) {
$post_type = get_query_var( 'post_type' );
if ( $post_type ) {
$post_type = array( 'nav_menu_item', $post_type );
} else {
$post_type = array( 'nav_menu_item', 'post', 'departments' );
}
$query->set( 'post_type', $post_type );
return $query;
}
}