如何使用wp query编写内部连接

kq0g1dla  于 2021-08-13  发布在  Java
关注(0)|答案(1)|浏览(259)

我有一个acf关系字段,用于自定义post类型properties。此外,这些属性的内容可以是英语或西班牙语。当我在“用户编辑”页上使用acf关系字段将属性与用户关联时-- /wp/wp-admin/user-edit.php --一切都按预期进行,我可以从关系下拉列表中为该用户选择所需的属性。
我的问题是:我如何在这个过滤器中编写一个查询,以便只显示英文属性,而不考虑wpml开关设置的页面语言(英文或西班牙文)?我知道如何用sql编写这样的查询:

SELECT *
FROM wp_2_posts
INNER JOIN wp_2_icl_translations
ON wp_2_icl_translations.element_id = wp_2_posts.id
AND wp_2_icl_translations.language_code = 'en'
WHERE wp_2_posts.post_type = 'properties';

但是过滤器要求对 $args 它遵循wp-u查询。我不知道如何写上面的内容 INNER JOINwp_2_icl_translations 仅以英语显示自定义文章类型属性。有人能告诉我怎样才能让acf过滤器按我需要的方式工作吗?

ruarlubt

ruarlubt1#

好的,所以我能够在用户管理页面上显示英文属性的方法是 posts_request 挂钩:

add_filter('posts_request', function($sql, $query) {
  $is_user_edit_page = (
    isset($_SERVER['HTTP_REFERER']) &&
    strpos($_SERVER['HTTP_REFERER'], 'user-edit') !== false
  );

  $is_property_sql  = (strpos($sql, 'property') !== false);

  if ($is_user_edit_page && $is_property_sql) {
    $sql = str_replace("'sp'", "'en'", $sql);
  }

  return $sql;
}, 10, 2);

在这个钩子里,我确保它只在 user-edit 并且它所更改的sql与属性相关。如果所有这些情况都是真的,那么我就用英语代码替换西班牙语代码。因此,用于查询属性的sql只能查询英文属性。

相关问题