在wordpress中使用meta_query进行搜索

时间:2017-09-19 11:39:14

标签: php wordpress

我使用wordpress搜索某些内容但有一些限制。每次我保存帖子时,我都会在meta中保存一个相关的帖子数组。

然后我试图搜索所有帖子中有相关的帖子,我有以下查询。所选帖子是我正在寻找的帖子的ID。

我检查了$selected_post,它的值如下所示。

$selected_post = "25";

我使用以下说明添加了元值,我使用update_post_meta$related_posts包含一系列帖子ID,如下例所示。

            update_post_meta( $post->ID, 'related_post', $related_posts );

查询

            $arg = array(
                'post_type'         => 'post',
                'posts_per_page'    => 5,
                'meta_query'        => array(
                    'relation'  => 'OR',
                    array(
                        'key'       => 'related_post',
                        'value'     => array( $selected_post ),
                        'compare'   => 'IN',
                        'type'      => 'STRING'
                    ),
                ),
            );

我在目前的一些帖子中检查了这个元素,我有类似的东西。

'related_post' => array( '15', '25', '46' );

当我使用WP_Query执行此查询时,它总是返回一个空数组。我想在查询中需要更多内容才能使其有效。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

问题是您正在尝试查询related_posts,就好像它是一个数组一样,但实际上它在添加到数据库时会被序列化。

在序列化数组上使用WP_Query

如果你要添加一个post meta数组,如下所示:

$fruit_array = array( 'apple', 'orange', 'banana' );
update_post_meta( $post->ID, 'fruit', $fruit_array );

...数据库中fruit的值为:

a:3:{i:0;s:5:"apple";i:1;s:6:"orange";i:2;s:6:"banana";}

因此,您需要使用LIKE在序列化字符串中搜索您要查找的值。

对于上面的示例,您的$args类似于:

$args = array(
    'post_type'     => 'post',
    'posts_per_page'    => 5,
    'meta_query'    => array(
             array(
                   'key'      => 'fruit',
                   'value'    => 'apple',
                   'compare'  => 'LIKE',
            ),
    )
);


搜索数字/帖子ID

在您的情况下,由于您使用的是post id,这很复杂。发布ID或数字并不是特定问题,但问题是LIKE也会返回部分匹配,因此14的查询也会返回141,{{1等等。

基于序列化字符串的结构,我认为以下内容应该有效:

1455

由于序列化字符串中的值变为$args = array( 'post_type' => 'post', 'posts_per_page' => 5, 'meta_query' => array( array( 'key' => 'related_post', 'value' => '"25"', /* include the double quotes in the search value */ 'compare' => 'LIKE', ), ) ); ,包括您要搜索的值中的双引号应该有效。