使用META_QUERY匹配序列化数组

时间:2014-01-11 作者:realph

我之前问过一个相关的问题,但我想我终于找到了问题的症结所在。

我正在使用Advanced Custom Fields 并将许多自定义字段附加到我的帖子类型。我正在尝试更改URL以通过自定义字段和值接收帖子。

我真的很接近了。这是我的functions.php:

add_action(\'pre_get_posts\', \'my_pre_get_posts\');

function my_pre_get_posts( $query ) {
    if( is_admin() ) { return; }

    $meta_query = $query->get(\'meta_query\'); // get original meta query

        if( isset($_GET[\'type\']) ) {                        

        $type = \'"\' . $_GET[\'type\'] . \'"\';      

        $meta_query[] = array(
            \'key\'       => \'type\',
            \'value\'     => $type,
            \'compare\'   => \'LIKE\',
        );
    }
    $query->set(\'meta_query\', $meta_query); // update the meta query args
    return; // always return
}
现在,因为ACF在处理自定义字段中的多个值时使用序列化数组,所以我使用LIKE 查询这个type 自定义字段实际上接受多个值,我可以按一个值显示帖子type (即:女性)成功。

网站com?类型=女性

但在尝试检索多个types(即:女性、男性、男孩),这不起作用。

网站com?类型=女性、男性、男孩

现在我意识到我在这里使用的是序列化数组,如果我想让它查询多个type\'我得把它炸了$type 变量,但这似乎也不起作用。

如果有人能帮忙,我迫切需要一个解决方案。谢谢

EDIT | Multiple times for each type:

$meta_query[] = array(
    \'relation\'  => \'OR\',
    array( 
        \'key\'       => \'type\',
        \'value\'     => \'men\',
    ),
    array( 
        \'key\'       => \'type\',
        \'value\'     => \'women\',
    ),
    array( 
        \'key\'       => \'type\',
        \'value\'     => \'boys\',
    ),
);

2 个回复
SO网友:e4rthdog

我只是想知道怎么做

看看这个例子:

$args = array();
$args[\'relation\'] = \'OR\';
foreach ( $tag_ids as $t ) {
    $args[] = array(
        \'key\'     => \'afz_entry_tags\',
        \'value\'   => serialize( strval( $t->id ) ),
        \'compare\' => \'LIKE\'
    );
}

$query->set( \'meta_query\', $args );
我正在$tag_ids 正常情况下get_results.

然后,我为meta\\u查询创建数组的第一项,以定义我需要的OR。

然后,我遍历从get\\u结果接收到的对象集合,并根据需要为meta\\u查询创建尽可能多的数组。

它就像一个符咒。

SO网友:Rarst

LIKE 不接受数组值。您的选择可能是:

为每种类型添加元查询,可能效果不太好,因为您已经在添加这些内容,并且需要OR 第条使用REGEXP 比较多个类型并将其粘合到正则表达式中,可能运行速度非常慢

结束

相关推荐

使用META_QUERY匹配序列化数组 - 小码农CODE - 行之有效找到问题解决它

使用META_QUERY匹配序列化数组

时间:2014-01-11 作者:realph

我之前问过一个相关的问题,但我想我终于找到了问题的症结所在。

我正在使用Advanced Custom Fields 并将许多自定义字段附加到我的帖子类型。我正在尝试更改URL以通过自定义字段和值接收帖子。

我真的很接近了。这是我的functions.php:

add_action(\'pre_get_posts\', \'my_pre_get_posts\');

function my_pre_get_posts( $query ) {
    if( is_admin() ) { return; }

    $meta_query = $query->get(\'meta_query\'); // get original meta query

        if( isset($_GET[\'type\']) ) {                        

        $type = \'"\' . $_GET[\'type\'] . \'"\';      

        $meta_query[] = array(
            \'key\'       => \'type\',
            \'value\'     => $type,
            \'compare\'   => \'LIKE\',
        );
    }
    $query->set(\'meta_query\', $meta_query); // update the meta query args
    return; // always return
}
现在,因为ACF在处理自定义字段中的多个值时使用序列化数组,所以我使用LIKE 查询这个type 自定义字段实际上接受多个值,我可以按一个值显示帖子type (即:女性)成功。

网站com?类型=女性

但在尝试检索多个types(即:女性、男性、男孩),这不起作用。

网站com?类型=女性、男性、男孩

现在我意识到我在这里使用的是序列化数组,如果我想让它查询多个type\'我得把它炸了$type 变量,但这似乎也不起作用。

如果有人能帮忙,我迫切需要一个解决方案。谢谢

EDIT | Multiple times for each type:

$meta_query[] = array(
    \'relation\'  => \'OR\',
    array( 
        \'key\'       => \'type\',
        \'value\'     => \'men\',
    ),
    array( 
        \'key\'       => \'type\',
        \'value\'     => \'women\',
    ),
    array( 
        \'key\'       => \'type\',
        \'value\'     => \'boys\',
    ),
);

2 个回复
SO网友:e4rthdog

我只是想知道怎么做

看看这个例子:

$args = array();
$args[\'relation\'] = \'OR\';
foreach ( $tag_ids as $t ) {
    $args[] = array(
        \'key\'     => \'afz_entry_tags\',
        \'value\'   => serialize( strval( $t->id ) ),
        \'compare\' => \'LIKE\'
    );
}

$query->set( \'meta_query\', $args );
我正在$tag_ids 正常情况下get_results.

然后,我为meta\\u查询创建数组的第一项,以定义我需要的OR。

然后,我遍历从get\\u结果接收到的对象集合,并根据需要为meta\\u查询创建尽可能多的数组。

它就像一个符咒。

SO网友:Rarst

LIKE 不接受数组值。您的选择可能是:

为每种类型添加元查询,可能效果不太好,因为您已经在添加这些内容,并且需要OR 第条使用REGEXP 比较多个类型并将其粘合到正则表达式中,可能运行速度非常慢

相关推荐

如何让`wp-list-table`显示我在Custom-Post中的`Custom-Fields`

一切都好吗<我需要wp-list-table 也要显示custom-fields 在每个custom-post 我有,但我不知道如何做到这一点,在这幅图中,它显示了带有字段的表格:Title, Author and Publication Date: 我想要的是能够选择custom-fields 将出现,例如以下示例Title, Carta, Naipe, Author, and Date of Publication: