【问题标题】:Searching using meta_query in wordpress在 wordpress 中使用 meta_query 进行搜索
【发布时间】:2018-02-28 04:21:50
【问题描述】:

我正在使用 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 执行此查询时,它总是返回一个空数组。我认为我需要在查询中添加更多内容才能使其正常工作。

任何帮助将不胜感激。

【问题讨论】:

  • 你的代码很好——你不应该在那里有'relation' => 'OR',因为你的元查询中只有一个条件,但它应该仍然有效。所以它必须与数据本身有关。您是否确认 $selected_post 具有有效的单一值?您如何添加related_post(例如自定义字段。使用 add_post_meta.ACF),它是什么格式?如果您只是查询单个值,为什么不使用= 而不是IN
  • @FluffyKitten 首先,感谢您的评论。是的,我检查了$selected_post 有一个值。我会更新我的问题,并为您提供您要求的信息。我正在查询我的$selected_post 是否在related_posts 数组中,它不是单个值。

标签: php wordpress


【解决方案1】:

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

在序列化数组上使用 WP_Query

如果您要添加一个帖子元数组,如下所示:

$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

在您的情况下,由于您使用的是帖子 ID,这很复杂。帖子 ID 或数字不是具体问题,但问题是 LIKE 也会返回部分匹配项,因此对 14 的查询也会返回 1411455 等。

基于序列化字符串的结构,我相信以下应该有效:

$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',
            ),
    )
);

由于序列化字符串中的值变为"25";,包括您要搜索的值中的双引号应该可以工作。

【讨论】:

    猜你喜欢
    • 2018-02-06
    • 2013-09-18
    • 1970-01-01
    • 2013-08-26
    • 2012-08-16
    • 2018-12-17
    • 1970-01-01
    • 2015-09-04
    • 2019-05-04
    相关资源
    最近更新 更多