我有一篇自定义帖子,其中有一个相关的分类法。这种分类法只有一个术语,帖子以布尔方式要么属于它,要么不属于它。
在搜索结果中,我希望显示属于分类法的自定义帖子,而不显示不属于分类法的帖子。我想了两种方法来实现这一点,但我不确定哪种方法是最好的:
仅包括属于分类术语的自定义帖子排除所有不属于分类术语的自定义帖子我已经成功地实现了与我想要的完全相反的操作,代码如下:
global $query_string;
$query_args = explode("&", $query_string);
$search_query = array();
foreach($query_args as $key => $string) {
$query_split = explode("=", $string);
$search_query[$query_split[0]] = urldecode($query_split[1]);
}
$custom_query = array();
$custom_query[\'tax_query\'][] = array( \'taxonomy\' => \'tax-whatever\', \'terms\' => array(\'term-whatever\'), \'field\' => \'slug\', \'operator\' => \'NOT IN\' );
$args = array_merge( $wp_query->query, $custom_query );
query_posts( $args );
$search = new WP_Query($search_query);
当然,这会输出所有不在术语中的自定义帖子。我如何才能实现完全相反的目标?
EDIT
我会尽量把我的问题解释清楚一点。让我们举个例子。
假设我有一个称为“选定”的分类法only one 分类术语“是”,用户可以通过复选框进行选择。我想我应该使用两个复选框(“是”和“否”),但当时我认为这没有多大意义。
当用户在网站中搜索某个内容时,所有页面、帖子和自定义帖子都会显示在结果中。我只想从搜索结果中删除自定义帖子that are not associated 用分类学术语“是”,其余的都保持原样。这意味着我要输出所有页面、帖子和“是”自定义帖子。
有什么办法可以做到这一点吗?谢谢
UPDATE
我有一个想法:有没有办法进行两次查询并合并结果?
一个查询,包含除自定义帖子外的所有帖子和页面(\'exclude_from_search\' => true
);仅包含与分类术语匹配的自定义帖子的其他查询($custom_query[\'tax_query\'][] = array( \'taxonomy\' => \'tax-whatever\', \'terms\' => array(\'term-whatever\'), \'field\' => \'slug\', \'operator\' => \'IN\' );
).但是,如果我使用以下内容:
$mergedposts = array_merge( $wp_query->query, $custom_query );
query_posts( $mergedposts );
它只会显示自定义帖子。
我想我可以使用SQL进行直接查询,但我从未使用过它。虽然这是我希望在将来学习的东西,但现在这似乎不是解决这类问题的好方法,因为我不明白我在做什么。
目前为止,我最好的选择是创建一个新的分类术语,并用它对所有“未分类”的自定义帖子进行分类。然而,它们只有几百个,所以需要一段时间。
NEW UPDATE
我找到了一种方法来检测自定义帖子是否属于分类法中的特定术语。这是我在某处学到的一段代码,因为我不具备PHP知识,无法独自创建这样的东西。然而,我了解正在做的事情,并根据自己的情况进行了调整。
function is_selected( $selected, $_post = null ) {
if ( empty( $selected ) )
return false;
if ( $_post )
$_post = get_post( $_post );
else
$_post =& $GLOBALS[\'post\'];
if ( !$_post )
return false;
$r = is_object_in_term( $_post->ID, \'selected\', $selected );
if ( is_wp_error( $r ) )
return false;
return $r;
}
此功能将正常工作,但只有在循环内使用时才能正常工作。但是,如果在进行搜索查询后更改循环,可能会弄乱分页,找到的结果数可能会错误。
不确定这是否是朝着正确方向迈出的一步,但至少这是一步。