Как написать внутреннее соединение с помощью запроса WP - PullRequest
0 голосов
/ 28 мая 2020

У меня есть поле связи ACF для настраиваемого типа сообщения, свойств. Кроме того, содержание этих свойств может быть на английском sh или на испанском sh. Когда я использую поле отношения ACF для связывания свойств с пользователем на странице редактирования пользователя - /wp/wp-admin/user-edit.php - все работает, как ожидалось, и я могу выбрать из раскрывающегося списка отношений те свойства, которые я хочу для этого пользователя.

У меня такой вопрос: как я могу написать запрос внутри этого фильтра , чтобы отображались только свойства Engli sh, независимо от языка страницы (Engli sh или Spani sh), который устанавливается переключателем 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_Query . Я не знаю, как написать выше INNER JOIN на wp_2_icl_translations, чтобы отображать только свойства настраиваемых типов сообщений на английском языке sh. Может кто-нибудь проинструктировать меня, как заставить acf-фильтр работать так, как мне нужно?

1 Ответ

0 голосов
/ 29 мая 2020

Хорошо, так что способ, которым я смог просто показать свойства Engli sh на странице администратора пользователя, был с этим 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 относится к свойствам. Если все эти случаи верны, я просто заменяю языковой код испанского sh на английский sh. И в результате SQL, используемый для запроса свойств, принудительно запрашивает только английские sh.

...