将TAX_QUERY中的标记设置为可选的最佳方式?

时间:2017-10-16 作者:Robbiegod

有没有更优雅的方式来做同样的事情。我有三个过滤器,我想用它们来影响第四个字段中的结果。池、月和标记是过滤器。我希望忽略标记,除非选择了标记。我一直遇到这样一个问题:如果没有选择标签,那么结果将显示在最终字段中。

我想出了一个便宜的方法,但我认为还有更好的方法。

我的方法是,如果标记的数组为空,那么我将更改传递给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),
                )
            ),
        );
    }
我曾尝试将标签查询放入一个数组中,并将关系设置为“或”,但这会使第四个字段为空,除非我选择了标签。我不想必须选择标签,因为该过滤器是一个奖金过滤器。这是一件可选的事情。最佳方法是什么?

1 个回复
最合适的回答,由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;
}

结束

相关推荐

使用新的WP-Query()从循环中过滤后期格式;

嗨,我目前正在为我的博客构建一个主题。下面的代码指向最新的帖子(特色帖子)。因为这将有一个不同的风格比所有其他职位。然而我想过滤掉帖子格式:链接使用我在循环中定义的WP查询,因为它给我带来了更多的灵活性。我该怎么做呢? <?php $featured = new WP_Query(); $featured->query(\'showposts=1\'); ?> <?php while ($featured->have_post