自定义存档页面上未显示 Wordpress 导航菜单
Wordpress Nav Menu not displaying on custom archive page
我目前正在创建一个 WordPress 主题,偶然发现了一个我不完全理解的问题。我在 mega_menu
位置显示我的导航菜单,使用:
wp_nav_menu(array('theme_location' => 'mega_menu'));
这适用于所有正常的 post 和页面。但是,当我在我的自定义 post 类型 menschen
的存档页面上时,菜单没有显示。 var_dumping mega_menu
位置上的导航菜单 return 是一个 WP_Term 对象,但得到的项目 return 是一个空数组。我不明白这种奇怪的行为,希望有人能帮助我。
我尝试在 header.php
文件中显示菜单,并在存档页面上调用 get_header()
。
这是我自定义 post 类型的注册:
function thg_custom_post_type()
{
register_post_type(
'menschen',
array(
'labels' => array(
'name' => __('Menschen'),
'singular_name' => __('Mensch'),
),
'public' => true,
'has_archive' => true,
'show_in_rest' => true,
'taxonomies' => array( 'category' ),
'menu_icon' => 'dashicons-businesswoman',
'supports' => array( 'title', 'editor', 'thumbnail', 'excerpt', 'custom-fields' ),
'rewrite' => array( 'slug' => 'menschen' ),
)
);
}
add_action('init', 'thg_custom_post_type');
更新
在论坛上搜索这个问题后,我注意到有些人在使用 pre_get_posts
WP 挂钩更改查询的排序顺序时也有这个错误。如果您更改所有 post 类型(包括菜单项)的顺序,您的菜单项可能无法正确显示,因为它们本身就是 post。
这可以通过包含一个检查当前查询是否为主查询的 if 语句来解决。例如,如果你有这个函数:
// Change sort order of archive page to alphabetical
add_action( 'pre_get_posts', 'my_change_sort_order');
function my_change_sort_order($query){
if (is_archive() && is_post_type_archive( 'menschen' )):
//Set the order ASC or DESC
$query->set( 'order', 'ASC' );
//Set the orderby
$query->set( 'meta_key', 'nachname' );
$query->set( 'orderby', 'meta_value' );
$query->set( 'posts_per_page', -1 );
endif;
};
您必须将 && $query->is_main_query()
添加到 if 语句中。这意味着除了主要查询之外的所有查询都会忽略该功能,因此菜单项不会消失。
有关更多信息,您可以访问 this Whosebug answer.
我目前正在创建一个 WordPress 主题,偶然发现了一个我不完全理解的问题。我在 mega_menu
位置显示我的导航菜单,使用:
wp_nav_menu(array('theme_location' => 'mega_menu'));
这适用于所有正常的 post 和页面。但是,当我在我的自定义 post 类型 menschen
的存档页面上时,菜单没有显示。 var_dumping mega_menu
位置上的导航菜单 return 是一个 WP_Term 对象,但得到的项目 return 是一个空数组。我不明白这种奇怪的行为,希望有人能帮助我。
我尝试在 header.php
文件中显示菜单,并在存档页面上调用 get_header()
。
这是我自定义 post 类型的注册:
function thg_custom_post_type()
{
register_post_type(
'menschen',
array(
'labels' => array(
'name' => __('Menschen'),
'singular_name' => __('Mensch'),
),
'public' => true,
'has_archive' => true,
'show_in_rest' => true,
'taxonomies' => array( 'category' ),
'menu_icon' => 'dashicons-businesswoman',
'supports' => array( 'title', 'editor', 'thumbnail', 'excerpt', 'custom-fields' ),
'rewrite' => array( 'slug' => 'menschen' ),
)
);
}
add_action('init', 'thg_custom_post_type');
更新
在论坛上搜索这个问题后,我注意到有些人在使用 pre_get_posts
WP 挂钩更改查询的排序顺序时也有这个错误。如果您更改所有 post 类型(包括菜单项)的顺序,您的菜单项可能无法正确显示,因为它们本身就是 post。
这可以通过包含一个检查当前查询是否为主查询的 if 语句来解决。例如,如果你有这个函数:
// Change sort order of archive page to alphabetical
add_action( 'pre_get_posts', 'my_change_sort_order');
function my_change_sort_order($query){
if (is_archive() && is_post_type_archive( 'menschen' )):
//Set the order ASC or DESC
$query->set( 'order', 'ASC' );
//Set the orderby
$query->set( 'meta_key', 'nachname' );
$query->set( 'orderby', 'meta_value' );
$query->set( 'posts_per_page', -1 );
endif;
};
您必须将 && $query->is_main_query()
添加到 if 语句中。这意味着除了主要查询之外的所有查询都会忽略该功能,因此菜单项不会消失。
有关更多信息,您可以访问 this Whosebug answer.