有没有更优雅的方式来做同样的事情。我有三个过滤器,我想用它们来影响第四个字段中的结果。池、月和标记是过滤器。我希望忽略标记,除非选择了标记。我一直遇到这样一个问题:如果没有选择标签,那么结果将显示在最终字段中。
我想出了一个便宜的方法,但我认为还有更好的方法。
我的方法是,如果标记的数组为空,那么我将更改传递给WP\\u查询的$args变量的值。在检查过程中,如果碰巧选择了标记,我会将名为$tag\\u status的变量的值设置为not\\u empty。然后我只是检查变量的值。
看一看:
if($tag_status == "not_empty"){
$args = array(
\'post_type\' => \'daily-marriage-tips\',
\'tax_query\' => array(
\'relation\' => \'AND\',
array(
\'taxonomy\' => \'cat_tips\',
\'field\' => \'slug\',
\'terms\' => $get_fym_dmt_pool,
),
array(
\'taxonomy\' => \'cat_months\',
\'field\' => \'slug\',
\'terms\' => array_for_query($current_post_id, $get_fym_dmt_month_arr),
),
array(
\'taxonomy\' => \'tag_tips\',
\'field\' => \'slug\',
\'terms\' => array_for_query($current_post_id, $get_fym_dmt_tags_arr),
\'relation\' => \'AND\'
),
),
);
} else {
$args = array(
\'post_type\' => \'daily-marriage-tips\',
\'tax_query\' => array(
\'relation\' => \'AND\',
array(
\'taxonomy\' => \'cat_tips\',
\'field\' => \'slug\',
\'terms\' => $get_fym_dmt_pool,
),
array(
\'taxonomy\' => \'cat_months\',
\'field\' => \'slug\',
\'terms\' => array_for_query($current_post_id, $get_fym_dmt_month_arr),
)
),
);
}
我曾尝试将标签查询放入一个数组中,并将关系设置为“或”,但这会使第四个字段为空,除非我选择了标签。我不想必须选择标签,因为该过滤器是一个奖金过滤器。这是一件可选的事情。最佳方法是什么?
最合适的回答,由SO网友:Robbiegod 整理而成
好日子。我找到了一个更好的方法。
我有一个自定义函数,它查看多维数组并确定它们是否为空。
使用它,我找到了一种方法,可以将tax\\u查询数组动态添加到wp\\u查询的主查询中。
我将“池”保存在主$args中。我删除了月份和标签。如果用户选择一个月,然后选择一个标记,则这些新数组项将添加到tax\\u查询中。
结果是这样的:
$args = array(
\'post_type\' => \'daily-marriage-tips\',
\'tax_query\' => array(
\'relation\' => \'AND\',
array(
\'taxonomy\' => \'cat_tips\',
\'field\' => \'slug\',
\'terms\' => $get_fym_dmt_pool,
),
)
);
// MONTHS ARRAY: check if the months array is empty
is_array_empty($current_post_id, $get_fym_dmt_month_arr);
if(is_array_empty($current_post_id, $get_fym_dmt_month_arr) == "not_empty"){
array_push(
$args[\'tax_query\'],
array(
\'taxonomy\' => \'cat_months\',
\'field\' => \'slug\',
\'terms\' => array_for_query($current_post_id, $get_fym_dmt_month_arr),
)
);
}
// TAGS ARRAY: check if the tags array is empty
is_array_empty($current_post_id, $get_fym_dmt_tags_arr);
if(is_array_empty($current_post_id, $get_fym_dmt_tags_arr) == "not_empty"){
array_push(
$args[\'tax_query\'],
array(
\'taxonomy\' => \'tag_tips\',
\'field\' => \'slug\',
\'terms\' => array_for_query($current_post_id, $get_fym_dmt_tags_arr),
)
);
}
我的自定义函数is\\u array\\u empty接受两个参数。要检查的帖子id和数组。下面是它的外观:
// Check if the array is empty
function is_array_empty($pID, $array) {
$item_arr = array();
foreach($array as $item_arr) {
if($item_arr[0] == NULL){
$status = "empty";
}else{
$status = "not_empty";
}
}
return $status;
}