Intereting Posts
Обработка загрузок изображений без толстого окна Установка администратора многоузловой сети в поддомен Почему номер телефона является гиперссылкой на настольных сайтах, в моем виджете? Как я могу это сделать, чтобы на странице «Добавить новую почту» параметр «Видимость» был установлен «Приватный» по умолчанию? При отправке формы site.com/blog/wp-admin он отправляется на сайт site.com/wp-admin Как загрузить приложение в медиа-библиотеку для текущего пользователя? wp_signon возвращает пользователя, но пользователь не зарегистрирован, потому что wp установлен на субдомене. Как заставить его работать? Являются ли частные сообщения видимыми для поисковых систем? Как создать страницу вложений для загрузки PDF? Subversion, github и т. Д. Системы управления версиями / репозитории Как узнать, активен ли Jetpack's Photon? Почему мой сайт не будет автоматически применять обновления после обновления до 3.7? Изменение параметров SMTP wp_mail для каждой электронной почты Ссылка на короткий код продукта WooCommerce Как заставить file_get_contents работать в wordpress

Как преобразовать результаты WP_Query (Custom Post Type, с пользовательскими полями) в JavaScript?

Я использую DataTables на этой странице .

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

Я считаю, что мне нужно сделать, чтобы преобразовать результаты WP_Query с соответствующими настраиваемыми полями в массив JavaScript.

Достаточно легко получить результаты WP_Query таким образом, но когда вы добавляете настраиваемые поля в микс, я застрял.

Любые идеи о том, как это можно сделать? Вы можете увидеть исходный код для этой страницы.

Solutions Collecting From Web of "Как преобразовать результаты WP_Query (Custom Post Type, с пользовательскими полями) в JavaScript?"

как написать WP_Query, который возвращает пользовательские данные поля

Это обычно не требуется. Вы можете просто получить доступ к метаданным для каждого сообщения в запросе индивидуально (как вы уже делали). Вы также можете перебирать запрос более одного раза на странице (он перематывается автоматически, это то, что while( have_posts() ) часть while( have_posts() ) ).

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

Ниже приведен упрощенный пример того, что вы можете сделать: Используйте JsonSerializable :

 class \JsonQuery extends \WP_Query implements \JsonSerializable { public function jsonSerialize() { return array_map( function( \WP_Post $post ) { return array_merge( $post->to_array(), get_post_custom( $post->ID ) ); }, $this->get_posts() ) } } 

Это так просто, как это (… выше). Теперь просто запросите все, что вам нужно, и

 // Enqueue script here! $query = new \JsonQuery( [ /* arguments you use in normal \WP_Query */ ] ); wp_localize_script( 'script-handle', 'globalJsVarName', json_encode( $query ) ); 

Затем у вас есть ваш JSON-кодированный запрос наряду со всеми пользовательскими данными.

Заметка:

  1. Выше код не проверен (на самом деле у меня было два телефонных звонка между ними, так что он может быть немного отключен здесь и там)
  2. Убедитесь, что вы запустили скрипт, чтобы вы могли локализовать данные для него.
  3. Убедитесь, что вы либо поместили JS в нижний колонтитул (последний аргумент при регистрации), либо запросите достаточно рано – не уверен, что это работает.

редактировать

Возможно, вы захотите написать Decorator для \WP_Query а не расширять его. Интернет расскажет вам о плюсах / минусах, поэтому не нужно повторять его здесь.

Хорошо, я ДУМАЮ, Я понимаю, о чем вы просите, не стесняйтесь сказать мне, что я в левом поле.

Прежде всего, вы захотите взглянуть на это: https://aarontgrogg.com/blog/2015/12/16/getting-to-know-and-adding-json-ld-to-a-wordpress- сайт /

Теперь я использовал это специально для получения данных Schema Data, но я считаю, что вы можете доставлять другие типы полезных нагрузок, например javascript.

Главный вопрос заключается в том, как получить данные пользовательского поля в вашу полезную нагрузку, и я думаю, что вы действительно спрашиваете?

Во всяком случае, используя метод, описанный в этой ссылке, чтобы создать мой json, я получил это в своей голове –

 <?php include('json-ld.php');?> <script type="application/ld+json"><?php echo json_encode($payload); ?></script> 

Затем в моем файле json-ld.php у меня есть следующее:

 <?php // JSON - LD for Reaction // Global Call function get_post_data() { global $post; return $post; } $post_data = get_post_data(); $payload["@context"] = "http://schema.org/"; //blog posts if (is_singular('post')) { //variables for the post $post_url = get_permalink(); $post_thumb = wp_get_attachment_url(get_post_thumbnail_id($post->ID)); $excerpt= get_the_excerpt($post->ID); // grab the post excerpt. $author_select = get_field('author', $post->ID); $moddatetime = new DateTime($post_data->post_date); // getting the team member if ($author_select == 'reaction') { $postauthor = 'Reaction'; } else if ($author_select == 'guest') { $postauthor = get_field('guest_writer_name', $post->ID); } else { $author = get_field('team_member', $post->ID); foreach($author as $member) { $postauthor = $member->post_title; } } // getting the tags $posttags = get_the_tags(); if ($posttags) { foreach($posttags as $tag) { $value .= $tag->name . ', '; } } $value = rtrim($value,', '); //payload $payload["@type"] = "blogPost"; $payload["url"] = $post_url; $payload["creator"] = array( "@type" => "Person", "name" => $postauthor, // outputs my post author as per the calls above ); $payload["headline"] = $post_data->post_title; // works $payload["datePublished"] = $moddatetime->format(DateTime::ISO8601); // works $payload["image"] = $post_thumb; $payload["description"] = $excerpt; // works $payload["about"] = $value; // works } // home page if (is_front_page()) { $logourl = get_site_url(); $payload["@type"] = "Organization"; $payload["name"] = "Reaction Marketing"; $payload["logo"] = $logourl . '/reaction-logo.png'; $payload["url"] = get_site_url(); $payload["sameAs"] = array("http://twitter.com/reaction", "https://www.facebook.com/ReactionMarketing", "http://www.linkedin.com/company/reaction-marketing"); $payload["contactPoint"] = array(array("@type" => "ContactPoint", "telephone" => "+1 403 346 6580", "email" => "info@reaction.ca", "contactType" => "sales")); } ?> 

Мой конечный результат – это схема, соответствующая странице и сообщению. Пример вывода на главную страницу здесь:

 <script type='application/ld+json'>{"@context":"http:\/\/schema.org","@type":"WebSite","url":"http:\/\/reaction.ca\/","name":"Reaction","alternateName":"Reaction","potentialAction":{"@type":"SearchAction","target":"http:\/\/reaction.ca\/?s={search_term_string}","query-input":"required name=search_term_string"}}</script> <script type='application/ld+json'>{"@context":"http:\/\/schema.org","@type":"Organization","url":"http:\/\/reaction.ca\/","sameAs":["https:\/\/www.facebook.com\/ReactionMarketing","https:\/\/www.instagram.com\/reaction","https:\/\/www.linkedin.com\/company\/reaction-marketing","https:\/\/twitter.com\/reaction"],"name":"Reaction Marketing","logo":"http:\/\/reaction.ca\/uploads\/REACTION-RGB.jpg"}</script> 

Теперь, очевидно, это специфично для схемы, но вы можете видеть там, что я назвал данные конкретными для разных настраиваемых полей (используя ACF). Вы можете видеть, как мои переменные вызываются в сообщениях в блогах.

Кажется, это соответствует тому, что вы просите?