我使用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
执行此查询时,它总是返回一个空数组。我想在查询中需要更多内容才能使其有效。
任何帮助将不胜感激。
答案 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',
),
)
);
,包括您要搜索的值中的双引号应该有效。