Intereting Posts
Как обрабатывать запросы администратора и паролей от разработчиков плагинов? add_meta_box не идет 'side' Получение дополнительных сообщений в WordPress через AJAX Импорт старого SQL-дампа в новую версию WordPress Предотвращение загрузки YouTube нескольких экземпляров проигрывателя JS? Как отобразить список сообщений CPT в мета-окне на странице меню? Что было бы правильным именем для настраиваемого типа сообщений, созданного для статического контента? Скрыть содержимое из предварительного просмотра Динамически добавлять / дублировать пользовательскую мета в пользовательских типах сообщений Удалить nav_menus из customizer с помощью темы WordPress автоматически добавляет «& nbsp;»? Страница настройки плагина wordpress, не зависящая от jquery? Скрыть тему в списке тем в wp-admin без редактирования файлов ядра API WordPress.org – Получить плагины любимых плагинов Показать продукты для категории, отсортированные по post_excerpt

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' );