我与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;
}
最合适的回答,由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;
}