如何编写带有WP查询的内连接

时间:2020-05-28 作者:robskrob

我有一个自定义帖子类型“属性”的ACF关系字段。此外,这些属性的内容可以是英语或西班牙语。当我在用户编辑页面上使用ACF关系字段将属性与用户关联时--/wp/wp-admin/user-edit.php -- 一切正常,我可以从“关系”下拉列表中为该用户选择所需的属性。

我的问题是:如何在内部编写查询this filter 这样,无论页面的语言(英语或西班牙语)是由WPML toggle? 我知道如何用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_Query. 我不知道如何写上面的内容INNER JOIN 在…上wp_2_icl_translations 仅以英文显示自定义帖子类型属性。有人能告诉我如何让acf过滤器按我需要的方式工作吗?

1 个回复
SO网友:robskrob

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

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只能查询英文属性。

感谢@Howdy\\u McGee对我的问题发表的评论。