1

我遇到了过滤页面以显示在 WP 查询中的问题。

我对带有 ACF(高级自定义字段插件 - 但没关系,因为它与 WP 自定义字段的工作原理相同)参数的自定义字段使用 Codex WP 查询参考来过滤页面。

在“多个自定义字段处理”段落中,Codex 获得了一个具有 2 个条件的示例。我们可以使用 OR 或 AND 关系。我为这两个工作,直到你有第三个条件(数组)。

他们使用示例:

    'relation' => 'OR',
      array(
       'key' => 'color',
       'value' => 'blue',
       'compare' => 'NOT LIKE'
      ),
      array(
       'key' => 'price',
       'value' => array( 20, 100 ),
       'type' => 'numeric',
       'compare' => 'BETWEEN'
      )

它只有 2 个数组。当我把第三,没有显示。在调试模式下,我可以看到一个错误:

WordPress database error: [Lost connection to MySQL server during query]

当我使用 AND 时,它可以工作,但我必须使用 OR。不幸的是,它使 MySQL 断开连接。我尝试向 phpMySQL 询问 WP 所做的相同查询。它引起了问题 - phpMyAdmin 说同样的:

Lost connection

任何想法?也许我应该尝试不同的过滤方法?(也许我应该使用分类法?)

这是我使用的代码:

$query_array = array('relation' => 'OR');
  array_push($query_array,
  array(
    'key' => 'filter1',
    'value' => 'value1',
    'compare' => 'LIKE'
  ),
  array(
    'key' => 'filter1',
    'value' => 'value2',
    'compare' => 'LIKE'
  ),
  array(
    'key' => 'filter1',
    'value' => 'value3',
    'compare' => 'LIKE'
  )
);

$args = array(
  'order' => $order_array,
  'meta_key' => $meta_key,
  'orderby'   => $orderby,
  'post_type' => 'page',
  'paged' => $paged,
  'post__in' => $postIDs,
  'posts_per_page' => 12,
  'paged' => get_query_var('paged'),
  'meta_query' => $query_array
);

query_posts($args);
?>

(当然设置了 $args 的变量)

我不知道为什么我不能使用

'compare' => '='

但可能这就是为什么我不能使用:

$query_array = array('relation' => 'OR');
  array_push($query_array,
  array(
    'key' => 'filter1',
    'value' => array('value1', 'value2', 'value3'),
    'compare' => 'IN'
  )
);
4

1 回答 1

1

只是想说你的评论对我有帮助;一段时间以来,我一直在努力解决一个非常相似的问题。我也在使用 ACF,并且使用它将一种帖子类型的项目附加到另一种自定义帖子类型很容易 - 例如,将 Person_1 和 Person_3 附加到“Project_A”。

这使得列出哪些用户附加到特定项目变得很容易。但是当它反过来做同样的事情时——显示哪些项目与哪些用户相关联——就变成了一个令人头疼的问题。

我终于想通了,部分归功于您的评论 - 我会在这里发布我的解决方案,以防其他人遇到同样的问题:

$args = array(
    'numberposts'   => -1,
    'post_type'     => 'project',
    'meta_query'    => array(
    'relation'      => 'IN',
        array(
            'key'       => 'people',
            'value'     => ';s:1:"' . $person->ID . '";',
            'compare'   => 'LIKE'
        )
    )
);

简而言之:因为转发器字段等中的 ACF 值是序列化的,比较关键字必须是“LIKE”,我在该值中添加了一些上下文以消除错误返回 - 只需搜索像“1”这样的 ID 将匹配很多(错误的)帖子,但“;s1;” part 确保给定值在索引 1 处,在我的例子中是正确的索引。

所以它需要根据情况进行调整。检查您尝试与 var_dumping "get_post_meta($post->ID, 'people')" 匹配的内容有助于获取正确的值。

于 2015-08-10T14:16:58.960 回答