【问题标题】:Wordpress Nav Menu not displaying on custom archive pageWordpress 导航菜单未显示在自定义存档页面上
【发布时间】:2020-10-30 16:11:38
【问题描述】:

我目前正在创建一个 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');

【问题讨论】:

    标签: php wordpress wordpress-theming


    【解决方案1】:

    更新

    在论坛搜索了这个问题后,我注意到有些人在使用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;
        };
    
    

    您必须在 if 语句中添加 && $query->is_main_query()。这意味着除了主查询之外的所有查询都会忽略该函数,因此菜单项不会消失。

    欲了解更多信息,您可以访问this stackoverflow answer.

    【讨论】:

    • 感谢您提供有用的更新!最后我不得不使用if (is_archive() && $query->is_post_type_archive( 'menschen' )):,这成功了。
    猜你喜欢
    • 2013-10-21
    • 1970-01-01
    • 1970-01-01
    • 2020-08-08
    • 1970-01-01
    • 1970-01-01
    • 2014-02-26
    • 2021-05-22
    • 1970-01-01
    相关资源
    最近更新 更多