无法使用自定义元数据过滤 WordPress 帖子

not able to filter WordPress posts with custom meta-data

这就是我通过后端 PHP

加载 post 的方式
$projects = new WP_Query([
      'post_type' => 'verlage',
      'posts_per_page' => -1,
      'order_by' => 'date',
      'order' => 'desc',
      'meta_key' => 'publiziert_in_sprache',
      'meta_value' => 'a:1:{i:0;s:7:\"Deutsch\";}'
    ]);

我要加载的 post 有以下数据(通过 postman 获取):

{
  "_cdp_origin": [
    "194"
  ],
  "_cdp_origin_site": [
    "-1"
  ],
  "_cdp_origin_title": [
    "I am a title"
  ],
  "_cdp_counter": [
    "65"
  ],
  "_thumbnail_id": [
    "24"
  ],
  "_edit_lock": [
    "1642265581:1"
  ],
  "_edit_last": [
    "1"
  ],

  "publiziert_in_sprache": [
    "a:1:{i:0;s:7:\"Deutsch\";}"
  ],
  "_publiziert_in_sprache": [
    "field_61be186edcb0b"
  ]
}

post 没有显示。它设置为 public 这样应该可以工作。如果我删除元过滤器,它也会显示出来。

"publiziert_in_sprache": [
    "a:1:{i:0;s:7:\"Deutsch\";}"
],

注意这是如何使用双引号作为字符串定界符的,所以在转义被解决之后,里面的转义双引号是实际的双引号。你得到的实际值是 a:1:{i:0;s:7:"Deutsch";}

'meta_value' => 'a:1:{i:0;s:7:\"Deutsch\";}'

在您的代码中,您使用单引号作为字符串分隔符,因此这些 \" 现在不再是转义双引号;它们只是一个反斜杠字符,后跟一个双引号字符。你在这里得到的实际值是 a:1:{i:0;s:7:\"Deutsch\";}

您的查询正在查找值中的反斜杠,这些反斜杠不包含在数据库中实际存储的内容中。

所以试试

'meta_value' => 'a:1:{i:0;s:7:"Deutsch";}'

相反。