Intereting Posts
Фильтрация изображений с тегами <meta> Пользовательский логотип не отображается после обновления wordpress 4.5 Селектор сообщений как пользовательское поле Случайные изображения без дубликатов (галерея ACF) Предотвратить добавление add_shortcode из тега Можно ли использовать плагин для хранения всех пользовательских функций для расширения других плагинов IIRF + IIS 6 + WordPress не возвращает ошибку 404 Ссылка, которая ссылается на элемент меню с динамически созданным URL-адресом Как разрешить посетителям вводить пользовательский тип сообщения? Получение ошибки 404 в jquery, которая находится в wp-include Как создать резервную копию и обновить сайт до более новой версии? Изменение порядка отображения отображаемого имени по умолчанию get_posts () с настраиваемым типом сообщений не работает вне page.php Требуется яркое изображение Порядок работы для этих трех крючков

Как отобразить массив meta_value?

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

Я ожидал, что он отобразит 16 23, но вместо этого он показывает 16 23 16 23 16 23 16 23 16 23 16 23 16 23 16 23 16 23 16 23

Вот код:

<?php global $wpdb; $results =$wpdb->get_results("SELECT post_id FROM $wpdb->posts , $wpdb->postmeta where $wpdb->postmeta.meta_value = '2015/06/03' AND meta_key='mymvkey'", OBJECT); foreach ($results as $result){ print_r ($result->post_id); } ?> 

Я все еще пытаюсь понять, как обрабатывать массивы (а не только в php), поэтому, вероятно, я ошибаюсь. Но каждый прочитанный пост говорит, что это должно сработать. Есть ли способ остановить его повторение и просто отобразить данные один раз?

Solutions Collecting From Web of "Как отобразить массив meta_value?"

SQL, который вы хотите, будет:

 $sql = " SELECT DISTINCT post_id FROM $wpdb->posts, $wpdb->postmeta where $wpdb->postmeta.meta_value = '2015/06/03'"; $results =$wpdb->get_results($sql); 

Но нет причин вообще $wpdb->posts таблицу $wpdb->posts , поскольку значение post_id$wpdb->postmeta .

 $sql = " SELECT DISTINCT post_id $wpdb->postmeta where $wpdb->postmeta.meta_value = '2015/06/03'"; $results =$wpdb->get_col($sql); 

Обратите внимание, что я изменил $wpdb->get_results на wpdb->get_col как вы возвращаете только один столбец данных. После этого результаты получат необходимость в меньшем количестве манипуляций.

Вы также можете пропустить DISTINCT и использовать array_unique() PHP:

 $sql = " SELECT post_id $wpdb->postmeta where $wpdb->postmeta.meta_value = '2015/06/03'"; $results =$wpdb->get_col($sql); $results = array_unique($results); 

Однако гораздо более правильным способом было бы использовать WP_Query . Я собирался предположить это, но потом заметил, что вы вообще не ищете meta_key , а ищете всю таблицу. В конечном итоге это вызовет проблемы. Предположим, что некоторые плагины хранят данные в $wpdb->postmeta с этим форматом даты? Тогда ваш код также будет извлекать эти значения, что, безусловно, не предназначено для поведения. Кто-то может даже ввести такие даты, как пользовательское поле, прямо из панели редактирования публикации. Вы должны указать ключ, например:

 $args = array( 'fields' = 'ids', 'ignore_sticky_posts' => true, 'meta_query' => array( array( 'key' => 'my_date_key', 'value' => '2015/06/03', ) ) ); $pids = new WP_Query($args);