WordPress税务查询使用操作符Like

时间:2014-02-07 作者:B L Praveen

我有与自定义帖子类型关联的分类颜色。我在一个表中列出了所有post meta和分类法。我在表中有一个选项,可以搜索与搜索值匹配的帖子。

当输入search键时,它将执行ajax调用以获取帖子。

这是获取与搜索字符串匹配的所有帖子的查询。

function get_query_posts_custom($post_id,$start,$length)  {
    //get_posts arguments
    $args =  array(
        \'post_type\'     => \'custom_post\',
        \'post_status\'   => array(\'publish\'),
        \'numberposts\'   => $length,
        \'offset\'        => $start,
        \'orderby\'       => \'menu_order\',
        \'order\'         => \'asc\',
        \'post_parent\'   => $_product->id
    );


    //get custom post taxonomy
    $taxonomies = (array) maybe_unserialize(get_post_meta( $post_id, \'post_taxonomy\', true));
    if(empty($attributes)) {
        $taxonomies = array();
    }

    $meta_keys  = array(\'type\',\'code\',\'key\');       
    if(!empty($search)) {
        foreach($meta_keys as $meta_key) {
            $meta_query[] = array(
                        \'key\'   => $meta_key,
                        \'value\' => $search,
                        \'compare\'   => \'LIKE\';
                    );

        }

        $args[\'meta_query\'] = $meta_query;
        $tax_query = array();

        foreach($taxonomies as $taxonomy) {
            $tax_query  = array(
                \'taxonomy\'  =>  $taxonomy;
                \'field\' =>  \'slug\';
                \'terms\' =>  $search;
                \'operator\'  => \'LIKE\';
            );
        }
        if(count($tax_query)) {
            $args[\'tax_query\'] = $tax_query;
        }
    }
    $results    = get_posts($args);
            return $results;
}
如何获取与分类法的搜索字符串匹配的帖子?

我搜索了wordpress函数引用,它说只有允许tax\\u查询的运算符是“IN、NOT IN或and”),我可以使用LIKE运算符吗?

4 个回复
SO网友:Eric Holmes

您唯一的选择是将自己的SQL写入posts_clauses 过滤器,从中可以获得JOIN, WHERE, ORDER, 等。可以更改、添加、删除等的条款。

关于这一点的一个主要注意事项是始终使用全局$wpdb\'sprepare 函数,它将清理所有可爱的数据。您不希望通过搜索词自定义查询允许任何类型的注入。:)

SO网友:Arvid

如其他答案所述,你不能简单地LIKE-使用wise搜索tax_query.

您可以做的是改变SQL 声明使用了@Eric Holmes建议的过滤器,这是一种先进的技术。你需要知道你在做什么。或者,您可以先进行单独的查询,加载分类术语(使用LIKE) 然后加载实际的帖子。

下面是一个简单的示例,用于加载与匹配LIKE$search 变量

//  load the terms using LIKE
$termIds = get_terms([
    \'name__like\' => $search,
    \'fields\' => \'ids\'
]);


//  load the posts using the found term IDs
$posts = get_posts([
    \'tax_query\' => [
        \'relation\' => \'OR\',
        [
            \'taxonomy\' => \'yourtaxonomy\',
            \'field\' => \'id\',
            \'terms\' => $termIds,
        ],
        [
            \'taxonomy\' => \'othertaxonomy\',
            \'field\' => \'id\',
            \'terms\' => $termIds,
        ],
    ],
]);

SO网友:Nicolai Grossherr

WP_Tax_Query 分别是WP_Queryget_posts() 只考虑以下内容operator 参数:

“operator”字符串(可选)
可能的值:“AND”、“IN”或“NOT IN”
默认值:“IN”

所以你不能使用LIKEoperator.

SO网友:Viktor Borítás

实际上,在分类查询中不需要使用比较参数/运算符(但在元查询中,是的)

因此,此修改的零件在默认情况下应使用“LIKE”:

foreach($taxonomies as $taxonomy) {
            $tax_query  = array(
                \'taxonomy\'  =>  $taxonomy;
                \'field\' =>  \'slug\';
                \'terms\' =>  $search;
            );
        }

结束

相关推荐