Чтение метаданных, только если сообщения являются общедоступными

Я хочу получить meta_values, применяемые к сообщениям.

В настоящее время я выполняю следующий запрос

global $wpdb; $table = $wpdb->prefix.'postmeta'; $values = $wpdb->get_results( "SELECT meta_value FROM $table WHERE meta_key = '$metakey' GROUP BY meta_value", ARRAY_A); 

Это возвращает все возможные meta_values . Есть ли возможность извлекать только meta_values сообщений с опубликованным post_status (а не частным ).

Да, сделайте INNER JOIN , что-то вроде этого должно работать:

 $values = $wpdb->get_col($wpdb->prepare(" SELECT meta_value FROM $wpdb->postmeta INNER JOIN $wpdb->posts {$wpdb->posts}.ID = {$wpdb->postmeta}.post_id WHERE meta_key= %s AND {$wpdb->posts}.post_status='publish'" ,$metakey )); 

Я изменил $wpdb->get_results() на $wpdb->get_col() поскольку похоже, что вы просто выбираете один столбец данных в виде массива. Я также добавил $wpdb->prepare() поскольку это, как правило, лучшая практика.