2016-08-11 154 views
0

我只是找不到答案,我也可以找到我的具体情况相关的文章(或我发现,但没有认出它)。WordPress的pre_get_posts过滤与高级自定义字段

所以,我有正常的博客文章,我有自定义字段名称“标签”,我只有1个单词“音乐”(标签是文本类型)。

我选择其中有“音乐”的“标签”的所有帖子PHP是:

add_filter('query_vars', function($vars) { 
$vars[] = 'tag'; 

return $vars; 
}); 


add_action('pre_get_posts', function ($query) { 
if (!empty($_GET)) { 

    if ($tag = get_query_var('tag', false)) { 
     $meta_query[] = array(
      'key' => 'tag', 
      'value'  => $tag, 
      'compare' => '=' 
     ); 
    } 

    $query->query_vars['meta_query'] = $meta_query; 
} 
}, 1); 

现在,当我在URL例如键入:帖子的本地主机/ myblog /标签=音乐没有一个是显示,即使我在“标签”字段中有“音乐”几个帖子。 我想首先解决这个简单的案例,因为我duno什么我做错了。

另外,我想解决方案,如果我想在文本字段“标签”,例如:“音乐,电影,流行音乐,生活”多重价值,所以当人们输入搜索“生活电影”时,他们获得所有职位与那些特定的领域。感谢您对文本的更大空间感到抱歉。任何帮助将appriciated。

回答

0

正如我从你的解释中了解到的,“标签”只是一个自定义字段,而不是分类标准。所以你不需要检查任何查询变量,只需使用“元查询”即可。

add_action('pre_get_posts', 'make_my_query'); 

function make_my_query($query) { 
    if (!is_admin() && !empty($_GET) && isset($_GET['tag']) && $query->is_main_query()) { 
    $query->set('meta_query', array(array(
     'key' => 'tag', 
     'value' => sanitize_text_field($_GET['tag']) 
    ))); 
    } 
} 

如果你使用这个片段中,页面上主查询将包含从$ _GET自定义字段键“标签”和值只有职位。我已经添加了一些检查,以确保我们没有查看管理面板,修改后的查询是页面上的主要查询。否则可能会有些混乱。另外我清理了GET值。

现在,你的第二个问题。这是可能的,但我们需要修改我们的片段。首先,让我们来决定,人们如何要求多个标签?我更喜欢使用逗号。所以URL看起来像这样:localhost/myblog /?tag =音乐,电影。现在让我们把它发送到WP查询:

add_action('pre_get_posts', 'make_my_query'); 

function make_my_query($query) { 
    if (!is_admin() && !empty($_GET) && isset($_GET['tag'] && $query->is_main_query()) { 
    $get_params = explode(',', $_GET['tag']); 
    $meta_query = array(
     'relation' => 'OR' 
    ); 
    foreach ($get_params as $param) { 
     $meta_query[] = array(
     'key' => 'tag', 
     'value' => sanitize_text_field($param) 
    ); 
    } 
    $query->set('meta_query', $meta_query); 
    } 
} 

就这样。现在,有人要求“?tag = film,music”的帖子会看到有“film”“tag”字段的“音乐”值的帖子。如果你想显示帖子,只有所有问标签,将“关系”从“或”更改为“和”。希望有所帮助!

+0

感谢您的回复,但似乎仍然没有工作,都没有例子。现在,我没有在我的functions.php中手动注册acf函数,我只是通过管理面板添加它们,也许我必须注册它们。? 对不起,打扰了你,这似乎很简单,但只是不适合我。 –

0

编辑:我发现了实际的问题......我无法命名我的自定义字段“标记”,因为某些原因www.example.com/?tag=music提供了一些奇怪的错误。将自定义字段的名称更改为其他任何内容(例如,标记),并且它可以工作。奇怪,我希望有人觉得它有用。

相关问题