【问题标题】:wordpress WP Query and Custom Field filteringwordpress WP 查询和自定义字段过滤
【发布时间】:2014-04-29 07:39:37
【问题描述】:

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

我使用 Codex WP query reference for custom fields 和 ACF(高级自定义字段插件 - 但没关系,因为它与 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'
  )
);

【问题讨论】:

  • 高级自定义字段是人人皆知的!它生成如下元值:a:3:{i:0;s:10:"value1";i:1;s:11:"value2";i:2;s:15:"value3";} 所以现在我需要像 LIKE 一样制作 IN,但要使用 Array。现在 IN 在像 '=' 这样的数组中工作。

标签: filtering custom-fields mysqlconnection wordpress


【解决方案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')" 匹配的内容有助于获取正确的值。

【讨论】:

  • 谢谢,您的回答很宝贵。就我而言,我检查了我的数据库以及数据的结构和更新查询文本以使用s:5:,而不是s:1:
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-11-14
  • 2023-03-17
  • 2014-05-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多