php - WordPress 导航菜单未显示在自定义存档页面上

标签 php wordpress wordpress-theming

我目前正在创建 WordPress 主题,并偶然发现了一个我不完全理解的问题。我在位置 mega_menu 上显示我的导航菜单,使用:

wp_nav_menu(array('theme_location' => 'mega_menu'));

这适用于所有正常的帖子和页面。但是,当我位于自定义帖子类型 menschen 的存档页面上时,菜单不会显示。 var_dumping mega_menu 位置上的导航菜单确实返回 WP_Term 对象,但获取项目会返回空数组。我不明白这种奇怪的行为,希望有人能帮助我。

我尝试在 header.php 文件中显示菜单,并在存档页面上调用 get_header()

这是我的自定义帖子类型的注册:

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 hook 更改查询的排序顺序时也遇到了这个错误。如果您更改所有帖子类型(包括菜单项)的顺序,您的菜单项可能无法正确显示,因为它们本身就是帖子。

这可以通过包含 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 stackoverflow answer.

关于php - WordPress 导航菜单未显示在自定义存档页面上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64611988/

相关文章:

php - PHP 中 return 、 echo 和 print 关键字之间的区别

php - php用utf-8编码导出csv乱码

php - 在 functions.php 中添加自定义字段键

php - Wordpress 的 sitename.com/post-name 类型永久链接背后的 secret 是什么

php - add_theme_support 不适用于 functions.php

javascript - Xdebug 忽略 php 代码中的断点

javascript - 如何在加载页面和提交表单时提交表单?

wordpress - 如果用户的登录页面仅显示视频-YouTube

WordPress 删除摘录过滤器

javascript - WordPress 媒体按钮设置