设置自定义$Query->Query_vars[‘META_KEY’]会中断WordPress菜单

时间:2014-03-27 作者:patrickzdb

首先,我的问题与此非常相似:https://stackoverflow.com/questions/10629245/wordpress-menu-disappears-when-query-query-varsmeta-key-is-set 然而,出于某种原因,这个问题的答案对我没有帮助。

我在函数中使用以下代码。php文件,用于根据页面URL中设置的自定义字段筛选帖子:

function my_pre_get_posts( $query )
{
    // validate
    if( is_admin() )
    {
        return;
    }

    if( isset($_GET[\'county\']) )
        {
            $query->set(\'meta_key\', \'venue_county\');
            $query->set(\'meta_value\', $_GET[\'county\']);
        }   
    }
    return;

}
add_action(\'pre_get_posts\', \'my_pre_get_posts\');
我复制了本教程中的代码http://www.advancedcustomfields.com/resources/tutorials/creating-wp-archive-custom-field-filter/

如果URL中设置了county,则上述代码可以过滤场馆存档页面上的结果。但是,这会中断wordpress主导航菜单。

当我尝试对代码应用修复时,通过添加

if( ! $query->is_main_query()) return;
这修复了菜单,但破坏了URL过滤,因此所有帖子都会返回,而不仅仅是那些将venue\\u county自定义字段设置为某物的帖子。

这很令人沮丧,任何帮助都将不胜感激!

例如,是否有一种方法可以检查查询是否针对导航菜单,如果是,则不触摸它,但仍然允许修改第二个查询以实际获取页面上的帖子?我想这就是if( ! $query->is_main_query()) return; 应该做。。。

谢谢

2 个回复
SO网友:Jake

我在一个自定义帖子类型的归档页面上遇到了完全相同的问题,还有一个不必要的额外查询;由于分页原因。搜索相同的解决方案时,我在堆栈溢出上找到了这篇文章https://stackoverflow.com/questions/21303743/new-wp-query-or-pre-get-posts-to-view-all-posts-for-custom-post-type

我玩了一个游戏,在函数中添加了这行代码。

if( ! $query->is_post_type_archive()) return;
我的最终代码如下所示。我对此进行了测试,它似乎不会以任何方式影响任何其他页面,并为我解决了问题。

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

function my_pre_get_posts( $query )
{

    // validate
    if( is_admin() )
    {
        return $query;
    }

    if( ! $query->is_post_type_archive() ) return;

    // allow the url to alter the query
    if( isset($_GET[\'status\']) )
    {
        $query->set(\'meta_key\', \'status\');
        $query->set(\'meta_value\', $_GET[\'status\']);
    }

    // always return
    return $query;
}

SO网友:patrickzdb

通过在归档模板顶部使用if语句而不是在函数内部使用if语句,我可以实现这一点。php。这可能不如将其包含在函数中那样有效。php文件(可能有2个查询?)但至少现在对我有用。

结束

相关推荐

设置自定义$Query->Query_vars[‘META_KEY’]会中断WordPress菜单 - 小码农CODE - 行之有效找到问题解决它

设置自定义$Query->Query_vars[‘META_KEY’]会中断WordPress菜单

时间:2014-03-27 作者:patrickzdb

首先,我的问题与此非常相似:https://stackoverflow.com/questions/10629245/wordpress-menu-disappears-when-query-query-varsmeta-key-is-set 然而,出于某种原因,这个问题的答案对我没有帮助。

我在函数中使用以下代码。php文件,用于根据页面URL中设置的自定义字段筛选帖子:

function my_pre_get_posts( $query )
{
    // validate
    if( is_admin() )
    {
        return;
    }

    if( isset($_GET[\'county\']) )
        {
            $query->set(\'meta_key\', \'venue_county\');
            $query->set(\'meta_value\', $_GET[\'county\']);
        }   
    }
    return;

}
add_action(\'pre_get_posts\', \'my_pre_get_posts\');
我复制了本教程中的代码http://www.advancedcustomfields.com/resources/tutorials/creating-wp-archive-custom-field-filter/

如果URL中设置了county,则上述代码可以过滤场馆存档页面上的结果。但是,这会中断wordpress主导航菜单。

当我尝试对代码应用修复时,通过添加

if( ! $query->is_main_query()) return;
这修复了菜单,但破坏了URL过滤,因此所有帖子都会返回,而不仅仅是那些将venue\\u county自定义字段设置为某物的帖子。

这很令人沮丧,任何帮助都将不胜感激!

例如,是否有一种方法可以检查查询是否针对导航菜单,如果是,则不触摸它,但仍然允许修改第二个查询以实际获取页面上的帖子?我想这就是if( ! $query->is_main_query()) return; 应该做。。。

谢谢

2 个回复
SO网友:Jake

我在一个自定义帖子类型的归档页面上遇到了完全相同的问题,还有一个不必要的额外查询;由于分页原因。搜索相同的解决方案时,我在堆栈溢出上找到了这篇文章https://stackoverflow.com/questions/21303743/new-wp-query-or-pre-get-posts-to-view-all-posts-for-custom-post-type

我玩了一个游戏,在函数中添加了这行代码。

if( ! $query->is_post_type_archive()) return;
我的最终代码如下所示。我对此进行了测试,它似乎不会以任何方式影响任何其他页面,并为我解决了问题。

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

function my_pre_get_posts( $query )
{

    // validate
    if( is_admin() )
    {
        return $query;
    }

    if( ! $query->is_post_type_archive() ) return;

    // allow the url to alter the query
    if( isset($_GET[\'status\']) )
    {
        $query->set(\'meta_key\', \'status\');
        $query->set(\'meta_value\', $_GET[\'status\']);
    }

    // always return
    return $query;
}

SO网友:patrickzdb

通过在归档模板顶部使用if语句而不是在函数内部使用if语句,我可以实现这一点。php。这可能不如将其包含在函数中那样有效。php文件(可能有2个查询?)但至少现在对我有用。

相关推荐

如何让`wp-list-table`显示我在Custom-Post中的`Custom-Fields`

一切都好吗<我需要wp-list-table 也要显示custom-fields 在每个custom-post 我有,但我不知道如何做到这一点,在这幅图中,它显示了带有字段的表格:Title, Author and Publication Date: 我想要的是能够选择custom-fields 将出现,例如以下示例Title, Carta, Naipe, Author, and Date of Publication: