我正在创建一个前端过滤器,其中包含访问者可以单击以根据分类法对帖子进行排序的复选框。他们可以过滤的帖子是自定义帖子类型,并附加了3个分类法。
这是一个自定义的ajax实时过滤器,因此,只要有人单击复选框,就将返回结果,而不会加载页面和提交按钮。
前端工作正常,发送到端点的信息也很好,并且如果我将查询范围缩小到仅一个分类标准,那么一切都会按预期工作,而无论我将过滤范围缩小到什么分类标准。但是在查询中有多个分类法时,我遇到了问题。这是我第一次创建类似这样的东西,所以我希望这只是我没有想到的小事,但是无论我尝试什么,分类法过滤器只会按第一个具有以下术语的分类法进行过滤:已选中。
示例:
税收1 税2 税3
如果单击的第一个复选框属于税收1 ,则只会在税收1 中进行过滤。如果我尝试单击属于 Tax 2 或 Tax 3 的复选框,它将完全忽略这些条款/税,仍然仅按第一个分类法进行过滤。
我知道我在查询中做错了什么,所以我真的希望这里的某人可以给我一些指导,以使我能做得很好。
以下是端点(查询):
def solution(number):
bits = [int(digit) for digit in bin(number)[2:]]
occurences = [i for i, bit in enumerate(bits) if(bit==1)]
res = [occurences[counter+1]-a-1 for counter, a in enumerate(occurences) if(counter+1 < len(occurences))]
if(not res):
print("Gap: 0")
else:
print("Gap: ", max(res))
number = 1042
solution(number)
答案 0 :(得分:0)
您所有的isset
条件都被错误地解释为与tax_query
相匹配。请参见下面更新的代码段,并与您的代码段进行比较以找出不同之处。
function myFilter ($data) {
$checkFylker = $data['checkFylker'];
$checkUtstyr = $data['checkUtstyr'];
$checkFors = $data['checkFors'];
$checkType = $data['checkType'];
//return $results;
//Main $args
$args = array(
'post_type' => 'ml_opp', // Query only "ml_opp" custom posts
'post_status' => 'publish', // Query only posts with "publish" status
'orderby' => 'date', // Sort posts by date
'order' => 'ASC' // ASC
);
$args['tax_query'] = array( 'relation'=>'AND' ); // AND means that all conditions of meta_query should be true
// for taxonomies / utstyr
if( isset( $checkUtstyr ) )
$args['tax_query'][] = array(
'taxonomy' => 'ml_utstyr',
'field' => 'id',
'terms' => $checkUtstyr
);
//for taxonomies / forsendelse
if( isset( $checkFors ) )
$args['tax_query'][] = array(
'taxonomy' => 'ml_forsendelse',
'field' => 'id',
'terms' => $checkFors
);
// for taxonomies / fylker
if( isset( $checkFylker ) )
$args['tax_query'][] = array(
'taxonomy' => 'ml_fylk',
'field' => 'id',
'terms' => $checkFylker
);
// for taxonomies / type
if( isset( $checkType ) )
$args['tax_query'][] = array(
'taxonomy' => 'ml_typ',
'field' => 'id',
'terms' => $checkType
);
$query = new WP_Query( $args );
if( $query->have_posts() ) :
while( $query->have_posts() ): $query->the_post();
echo '<h2>' . $query->post->post_title . '</h2>';
endwhile;
wp_reset_postdata();
else :
echo 'No posts found';
endif;
die();
}