带有自定义帖子类型链接的菜单消失

时间:2015-08-25 作者:user2812779

我与Genesis主题合作了一段时间,但从未遇到任何问题:)

这是我的第一个大问题,我不知道如何解决它。我正在制作一个新的网站,带有自定义帖子类型和WP All导入插件。一切都很好,但我做了一些过滤器,通过自定义的帖子类型进行过滤。过滤器正常工作,但页面重新加载后,我的主菜单消失了。

这就是我的意思。(尚未激活,因此您可能会看到一些错误)

不带过滤器和菜单:With Menu

带过滤器,不带菜单:Without Menu

有人知道为什么会发生这种情况,以及我如何解决这个问题?

提前谢谢。

谨致问候,

乔普

This is the filter in my functions.php

    // action
add_action(\'pre_get_posts\', \'my_pre_get_posts\');

function my_pre_get_posts( $query ) {

    // bail early if is in admin
    if( is_admin() ) {

        return;

    }


    // get meta query
    $meta_query = $query->get(\'meta_query\');

    if(!empty($_GET[\'contract\']))
    {
        $contract = explode(\',\', $_GET[\'contract\']);
        $meta_query[] = array(
        \'key\' => \'contract\',
        \'value\' => $_GET[\'contract\'],
        \'compare\' => \'IN\',
        );
    }

    $query->set(\'meta_query\', $meta_query);

    return;
}

1 个回复
最合适的回答,由SO网友:Milo 整理而成

pre_get_posts 过滤器将应用于页面上的所有查询—主查询、菜单和其他WP\\U查询实例。

要仅以主查询为目标,请使用is_main_query():

function my_pre_get_posts( $query ) {

    // bail early if is in admin
    // or if query is not main query
    if( is_admin() || !$query->is_main_query() ) {
        return;
    }

    // get meta query
    $meta_query = $query->get(\'meta_query\');

    if(!empty($_GET[\'contract\']))
    {
        $contract = explode(\',\', $_GET[\'contract\']);
        $meta_query[] = array(
        \'key\' => \'contract\',
        \'value\' => $_GET[\'contract\'],
        \'compare\' => \'IN\',
        );
    }

    $query->set(\'meta_query\', $meta_query);

    return;
}

相关推荐

Custom items for Menus

编辑菜单时,我发现可以添加5种类型的项目:自定义链接页面帖子类别标签是否可以添加自定义的?比如说,我想添加一个图像,或者一个搜索栏,或者其他什么。我是否可以添加新的菜单项类型,以呈现我为它们选择的代码?