Intereting Posts
оптимизировать правило перезаписи wordpress rewrite $ wpdb-> get_var – Какое значение возвращается, когда нулевые записи найдены? has_term () не возвращается, когда термин назначен post? Раздвижные страницы + wordpress В панели управления администратора я могу выбрать, какие разделы будут отображаться? Get_posts не возвращает никаких сообщений при использовании с switch_to_blog Плагин jQuery загружен правильно, но ничего не делает Как получить глубину подкатегорий категории Могу ли я снова получить доступ к моему веб-сайту WordPress? Как отображать связанные записи из родительской категории Как сделать Ajax в пользовательском плагине WordPress? Отображение результатов запроса пользовательской таксономии Использование ob_start () в плагине Как отредактировать wp_head и / или functions.php, чтобы удалить rss-канал, который не используется и не проверяет? Автоматическое присвоение автору категории

wpdb Пользовательские метаданные с 2 условиями

Это одна из тех проблем, на которые я потратил слишком много времени, и, возможно, очень простое решение, которое мне не хватает. Любая помощь будет принята с благодарностью.

Я пытаюсь заполнить поле выбора именами из пользовательских данных ( meta_key « pyd_pub_author »). Но я не могу просто вызвать данные напрямую, потому что также нужно убедиться, что meta_key "pyd_pub_type" = "Newsletter"

meta_value для meta_key "pyd_pub_type" должен быть "Newsletter" а имена авторов должны поступать из meta_key « pyd_pub_author ». Трудная часть состоит в том, что есть много других « pyd_pub_authors », которые связаны с другим « pyd_pub_type », мне также необходимо их отфильтровать.

Поэтому мне нужно отфильтровать meta_value « Newsletter » и все связанные с ним « pyd_pub_author ».

Я сделал следующее:

  $metakey = $prefix . 'pub_author'; $authors_query = $wpdb->get_col( $wpdb->prepare( "SELECT DISTINCT meta_value, post_id FROM $wpdb->postmeta WHERE meta_key = %s HAVING post_id = ANY ( SELECT DISTINCT post_id FROM $wpdb->postmeta WHERE meta_value = 'Newsletter' ) ", $metakey ) ); 

Это возвращает имя автора для каждого из post_id (s), которые соответствуют списку, даже если они дублируются. «DISTINCT» не фильтрует имена, потому что проверяет post_id.
Итак, к чему это приводит меня, запускается array_unique (), чтобы вырезать дубликаты. Он работает, но для этого должен быть более простой и дешевый способ.

head-> стол, head-> стол, head-> стол …

Solutions Collecting From Web of "wpdb Пользовательские метаданные с 2 условиями"

Я нашел свою ошибку в вышеуказанном запросе. По-прежнему может быть лучший способ сделать это, спасибо вам, кайзер, и я обновлю, как только сделаю больше исследований. То, что я забыл сделать, это GROUP_CONCAT другое meta_value, чтобы я мог вытащить разные биты. Это все еще кажется длиннее, чем нужно, но он быстро выполняет свою работу. Вот код, просто оберните это в форме и выберите, и вы можете сбрасывать уникальные мета-значения с помощью нескольких фильтров.

  $metakey = $prefix . 'pub_author'; $authors_query = $wpdb->get_col( $wpdb->prepare( "SELECT meta_value, post_id, GROUP_CONCAT(meta_value) FROM pyd_postmeta WHERE meta_key = %s GROUP BY meta_value HAVING post_id = ANY ( SELECT post_id FROM pyd_postmeta WHERE meta_value = 'Newsletter' ) ", $metakey ) ); if ( $authors_query ) { foreach ( $authors_query as $author ) { ?> <option value="<?php echo $author ?>" <?php selected( $pydnet_show_author, $author ) ?> ><?php echo $author ?></option>'; <?php } } 

Вы можете использовать фильтр posts_clauses чтобы перехватить запрос и изменить все, что вам нужно. Это также дает вам более подробную информацию о всех частях запроса и более простой способ отладки.

 function debug_query( $pieces ) { $dump = '<pre>'; $dump .= var_export( $pieces, FALSE ); $dump .= '</pre>'; echo $dump; } add_filter( 'posts_clauses', 'debug_query' );