wordpress WP查询和自定义字段过滤

时间:2014-04-29 07:39:37

标签: wordpress filtering custom-fields mysqlconnection wp-query

我已经遇到过滤页面要在WP查询中显示的问题。

我使用Codex WP query reference for custom fields和ACF(高级自定义字段插件 - 但它并不重要,因为它与WP自定义字段的工作方式相同)参数来过滤页面。

In"多个自定义字段处理"段落,Codex得到了一个有两个条件的例子。我们可以使用OR或AND关系。我为两者工作,直到你有第三个条件(数组)。

他们使用示例:

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

它只有2个数组。当我放第3,没有任何表现。在调试模式下,我可以看到错误:

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

1 个答案:

答案 0 :(得分:0)

只是想说你的评论帮助了我;一段时间以来,我一直在反对一个非常类似的问题。我也使用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值是序列化的,所以compare关键字必须是“LIKE”,并且我在该值中添加了一些上下文以消除错误的返回 - 只是搜索像“1”这样的ID会匹配很多(错误的)帖子,但是“; s1;” part确保给定值在索引1处,在我的情况下是正确的索引。

因此需要根据具体情况进行调整。检查你想要与var_dumping匹配的内容“get_post_meta($ post-> ID,'people')”有助于获得正确的值。