如何使用WP查询编写内部联接

问题描述 投票:0回答:1

我有一个自定义帖子类型,属性的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';

但是,过滤器要求对遵守$argsWP_Query进行更改。我不知道如何在INNER JOIN上写上面的wp_2_icl_translations以仅显示英文的自定义帖子类型属性。有人可以告诉我如何操作,以便我可以使acf过滤器按我需要的方式工作吗?

sql wordpress wpml
1个回答
0
投票

好吧,我能够在用户管理页面上仅显示英语属性的方法是使用此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被强制仅查询英语属性。

© www.soinside.com 2019 - 2024. All rights reserved.