Возврат всех настраиваемых метаданных для одного настраиваемого типа сообщений

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

Теперь я хотел бы добавить страницу на свой сайт, которая отображает ВСЕ имена на карте, основанные на их широте и долготе.

Я, очевидно, знаю, как получить одиночные значения и получить их на карте, но я не настолько опытен в WordPress, поэтому я не уверен, каким лучшим способом было бы получить всю эту информацию структурированным способом для того, что я Я пытаюсь это сделать. Любые указатели, чтобы начать меня, будут оценены.

Solutions Collecting From Web of "Возврат всех настраиваемых метаданных для одного настраиваемого типа сообщений"

Если у всех ваших сообщений типа post есть все мета-поля, которые вам нужны, вы можете использовать аргумент fields и установить его для ids которые будут работать намного быстрее, например:

 //get your custom posts ids as an array $posts = get_posts(array( 'post_type' => 'your_post_type', 'post_status' => 'publish', 'posts_per_page' => -1, 'fields' => 'ids' ) ); //loop over each post foreach($posts as $p){ //get the meta you need form each post $long = get_post_meta($p,"longitude-key",true); $lati = get_post_meta($p,"latitude-key",true); $name = get_post_meta($p,"name-key",true); //do whatever you want with it } 

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

 $args = array( // basics 'post_type' => 'your_post_type', 'post_status' => 'publish', // meta query 'meta_query' => array( 'relation' => 'AND', array( 'key' => 'longitude-key', 'value' => '', 'compare' => 'NOT' ), array( 'key' => 'latitude-key', 'value' => '', 'compare' => 'NOT' ), array( 'key' => 'name-key', 'value' => '', 'compare' => 'NOT' ), ) ); $posts = new WP_Query( $args ); 

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

Почему бы не использовать get_metadata () ?

Если вы передадите правильные параметры, вы получите все мета-атрибуты сообщения (обычай или нет).

Пример:

 $META_ATTRIBUTES = get_metadata( 'post', get_the_ID(), '', true ); 

Обратите внимание, что я не использовал свое имя машины cpt в качестве первого параметра; вы должны использовать «пост», иначе функция ничего не вернет.

Установка третьего параметра ( мета-ключа ) в пустую строку, которую вы передаете функции, чтобы получить все мета-атрибуты сообщения.

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

 add_action( 'rest_api_init', 'create_api_posts_meta_field' ); function create_api_posts_meta_field() { // register_rest_field ( 'name-of-post-type', 'name-of-field-to-return', array-of-callbacks-and-schema() ) register_rest_field( 'tour', 'metaval', array( 'get_callback' => 'get_post_meta_for_api', 'schema' => null, ) ); } function get_post_meta_for_api( $object ) { //get the id of the post object array $post_id = $object['id']; //return the post meta return get_post_meta( $post_id ); }