Wordpress pre_get_posts类别过滤器删除自定义菜单项

时间:2013-10-05 05:46:20

标签: php html wordpress

所以我有这个网站,你可以看到有两个菜单,一个在徽标旁边,另一个在右上方;

http://www.ducklingfarm.com

它们是在functions.php;

中使用此代码创建的
function register_my_menus() {
register_nav_menus(
  array(
  'header-menu' => __( 'Header Menu' ),
  'extra-menu' => __( 'Extra Menu' )
)
 );
 }
add_action( 'init', 'register_my_menus' );

这是我使用菜单的代码;

<nav>
<?php wp_nav_menu(array( 'theme_location' => 'header-menu' ) ) ?>
</nav>

<nav id="ecommerce">
<?php wp_nav_menu( array( 'theme_location' => 'extra-menu' ) ); ?>
</nav>

菜单工作正常,除非您转到侧栏中的类别,例如“博客”页面上的“文章”或“活动”;

http://www.ducklingfarm.com/blog/

博客页面是一种自定义的帖子类型,为了使类别有效,我在functions.php中添加了一些代码,从那时起菜单就无法正常工作。该代码是;

add_filter('pre_get_posts', 'query_post_type');
function query_post_type($query) {
if(is_category() || is_tag()) {
$post_type = get_query_var('post_type');
if($post_type)
    $post_type = $post_type;
else
    $post_type = array('post','Blog');
$query->set('post_type',$post_type);
return $query;
}
}

所以我猜这个代码有问题。请帮我!我真的很感激。

最佳, Jaeeun

我通过将最后一个代码更改为此来解决了这个问题;

add_filter('pre_get_posts', 'query_post_type');
function query_post_type($query) {
if(is_category()  && $query->is_main_query()) {
$post_type = get_query_var('post_type');
if($post_type)
    $post_type = $post_type;
else
    $post_type = array('post','Blog');
$query->set('post_type',$post_type);
return $query;
}
}

2 个答案:

答案 0 :(得分:7)

您可以尝试此操作(无需多个if$post_type = $post_type;

add_filter('pre_get_posts', 'query_post_type');
function query_post_type($query) {
    if(is_category()  && $query->is_main_query()) {
        $query->set( 'post_type', array( 'post', 'Blog' ) );
    }
    return $query;
}

答案 1 :(得分:3)

先检查一下这些条件:

  if ($query->get('post_type') == 'nav_menu_item')
    return $query;

喜欢这里:

    function wp32151_search_filter($query)
{
    if ($query->get('post_type') == 'nav_menu_item')
        return $query;

    if ($query->is_search) {
        $query->set('post_type', 'shows');
    } 

    return $query;
}

add_filter('pre_get_posts', 'wp32151_search_filter');