【问题标题】:Wordpress function makes my menu disappearWordpress 功能让我的菜单消失
【发布时间】:2013-06-18 07:21:30
【问题描述】:

我正在使用此功能使我的自定义帖子类型“投资组合”显示在档案/类别/标签页面上(在 functions.php 中):

function namespace_add_custom_types( $query ) {
  if( is_category() || is_tag() && empty( $query->query_vars['suppress_filters'] ) ) {
    $query->set( 'post_type', array('post', 'portfolio'));
      return $query;
    }
}
add_filter( 'pre_get_posts', 'namespace_add_custom_types' 

问题是由于某种原因它使我的导航菜单消失了。这是导航菜单的代码(在 header.php 中):

<?php wp_nav_menu(array( 'theme_location'  => 'primary', 'sort_column' => 'menu_order', 'menu_class' => 'nav-menu', 'container_class' => 'nav-menu',) ); ?>

知道我可以改变什么吗?

【问题讨论】:

  • 控制台有错误吗?
  • 代码中是否存在菜单的html?
  • 菜单中的所有 html 都来自 wp_nav_menu(),然后由 css 设置样式。但是没有输出html。如果我删除函数“namespace_add_custom_types”,那么菜单就会恢复工作。
  • 尝试注释掉该行:return $query;这会让菜单重新出现吗?
  • 不,似乎只是上面的那一行在做。

标签: php wordpress function custom-post-type


【解决方案1】:

将这个:'nav_menu_item' 添加到您的 functions.php 文件中的数组中。 最终代码如下所示:

function namespace_add_custom_types( $query ) {
if( is_category() || is_tag() && empty( $query->query_vars['suppress_filters'] ) ) {
$query->set( 'post_type', array(
'post', 'nav_menu_item', 'portfolio'
));
return $query;
}
}
add_filter( 'pre_get_posts', 'namespace_add_custom_types' );

【讨论】:

    【解决方案2】:

    WordPress 导航菜单包含 nav_menu_item 帖子类型的帖子,并且当您的函数更改所有查询的帖子类型时,没有任何内容可显示。

    解决方案:通过检查is_main_query只修改主查询,例如:

    if( is_category() && $query->is_main_query() ) {
        // do stuff
    }
    

    PS:pre_get_posts 是一个 action 钩子,所以你应该使用add_action 而不是add_filter

    add_action( 'pre_get_posts', 'namespace_add_custom_types' );
    

    【讨论】:

      猜你喜欢
      • 2013-10-14
      • 1970-01-01
      • 1970-01-01
      • 2012-04-03
      • 2019-12-12
      • 2019-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多