Intereting Posts
Исключить функцию только с домашней страницы? Как обновить настраиваемое поле таксономии с помощью wp_update_term ()? Используйте один шаблон для разных пользовательских типов сообщений с одинаковой разметкой Как удалить ссылку эскиза продукта из определенного div в Woocommerce? Как получить количество сообщений в пользовательских таксономах WordPress за последний месяц за каждый день? Как перетаскивать сразу несколько элементов меню в WordPress? Как обновить настройку темы после изменения цвета внутри wpColorPicker? Получить все идентификаторы термина Функция для извлечения содержимого блога через RSS-канал Как получить мета значение из всех сообщений Пользовательский плагин: укажите на `template_directory` Как открыть модальное окно при нажатии ссылки меню WP? Ошибка регистрации версии скрипта Параметры отображения «размер» недоступны в настройках изображения модальный Добавление кнопки в меню WordPress

Shortcode показывает неправильный post_title

У меня есть короткий код, который отображает пользовательский тип сообщения, через foreach . Штрих-код использовался в стандартном типе сообщения. Я использовал the_title(); в коротком коде. the_title(); выводит post_title стандартного типа сообщения (в котором находится the_title(); ), а не the_title(); типа персонализированного сообщения. Мой код:

 function faq_register_shortcode() { add_shortcode( 'display_faqs', 'mp_faq_shortcode' ); } function mp_faq_shortcode() { $args = array( 'post_type' => 'faq_type_mp', 'numberposts' => 3, 'post_status' => 'any', 'post_parent' => null ); $attachments = get_posts( $args ); if ($attachments) { foreach ( $attachments as $post ) { the_title(); the_content(); } } } 

Например, если стандартный тип сообщения (в котором находится post_title ), имеет post_title «это стандартный тип сообщения», это то, что выводится в коротком коде. Я хочу отобразить post_title который принадлежит к типу персонализированного сообщения, а не стандартного сообщения (в котором находится post_title ).

Что я сделал неправильно, пожалуйста?

Solutions Collecting From Web of "Shortcode показывает неправильный post_title"

Вам нужно добавить setup_postdata($post); внутри вашей петли:

  foreach ( $attachments as $post ) { setup_postdata($post); the_title(); the_content(); } 

Я предполагаю, что вам нужно будет использовать setup_postdata($post); внутри вашей петли foreach. https://codex.wordpress.org/Function_Reference/setup_postdata

И the_title и the_content являются тегами шаблонов и работают внутри Loop на основе global переменной $post которая настраивается setup_postdata или the_post ( которая запускает setup_postdata ). Что происходит, так это то, что те теги используют все значения, которые в последний раз были перенесены в global $post переменную global $post . Вы можете запустить setup_postdata в своей функции, как уже было предложено, или сделать что-то вроде:

 foreach ( $attachments as $post ) { echo apply_filters('the_title',$post->post_title)); echo apply_filters('the_content',$post->post_content)); } 

ОТВЕТ

Это рабочий код

 function faq_register_shortcode() { /* register the [display_faqs] shortcode */ add_shortcode( 'display_faqs', 'mp_faq_shortcode' ); } function mp_faq_shortcode() { global $post; $args = array( 'post_type' => 'faq_type_mp', 'numberposts' => 3, 'post_status' => 'any', 'post_parent' => null ); $attachments = get_posts( $args ); if ($attachments) { foreach ( $attachments as $post ) { setup_postdata($post); the_title(); the_content(); } } } 

На основе этой страницы кода (кто-то связан с) https://codex.wordpress.org/Function_Reference/setup_postdata . Извините, я не могу объяснить это дальше, потому что сейчас я не понимаю, почему он работает.