Объясните почему в одном случае предпросмотр работает корректно, в другом же нет?

Ссылка скопирована
PHP
1 ответ

Почему если выводить новости в инфинити ленте (в частности заголовки так)
<?php //echo get_the_title($single_post->ID); ?>
То превью в wp не отображает изменения без сохранения
Но если вывести вот таким способом
<?php echo get_the_title(); ?>
То все станет в нормальный вид

PS Аналогично и тут

&lt;?php $content = apply_filters('the_content', $single_post-&gt;post_content, $single_post-&gt;ID); ?&gt; &lt;div class="page-content"&gt; &lt;?php echo $content; ?&gt; // Не выдаст измениния  &lt;?php the_content(); ?&gt; // Изменения будут видны без сохранения

&lt;?php $content = apply_filters('the_content', $single_post-&gt;post_content, $single_post-&gt;ID); ?&gt; &lt;div class="page-content"&gt; &lt;?php echo $content; ?&gt; // Не выдаст измениния &lt;?php the_content(); ?&gt; // Изменения будут видны без сохранения

Дополнительно:

Объясните почему в одном случае предпросмотр работает корректно, в другом же нет?

Ничего не понятно, что за предпросмотр, и в каком месте темы это работает, но что-то подсказывает что объект $single_post у вас undefined , и надо так

global $post; echo get_the_title($post-&gt;ID);

global $post; echo get_the_title($post-&gt;ID);

  • У Worpdress есть такая штука как предпросмотр записи , он не корректно работает
  • Роман Страх, а есть предпросмотр в кастомайзере, а есть предпросмотр всякого в плагинах, указывать надо корректно исходные данные, но причину я скорее всего указал.
  • &lt;?php  require_once(COMPONENTS_PATH . "icons/camera-icon.php"); require_once(COMPONENTS_PATH . "icons/video-content-icon.php"); require_once(COMPONENTS_PATH . 'line-news-list-item.php');  require_once(COMPONENTS_PATH . 'content-exist-markers.php');  function render_news_whole_post($id, $cat = NULL) {     $single_post = get_post($id); 	gt_set_post_view($id);     $author_id = $single_post-&gt;post_author;     $taxonomies = get_my_taxonomies($id);     if (!empty($taxonomies)) {         $primary_category = get_post_primary_category($id, $taxonomies);         if(!empty($primary_category['primary_category'])){             $primary_category = $primary_category['primary_category'];             $cat_link = home_url();             $cat_link .= '/';             $cat_link .= $primary_category-&gt;taxonomy;             $cat_link .= '/';             $cat_link .= $primary_category-&gt;slug;         }     }     ?&gt;     &lt;div class="post" data-url="&lt;?php echo get_permalink($id)?&gt;"&gt;         &lt;div class="post-header"&gt;             &lt;div class="content-exists"&gt;                 &lt;div class="content"&gt;                     &lt;?php $exist_markers = render_content_exist_markers($id); ?&gt;                     &lt;?php if ($exist_markers): ?&gt;                         &lt;?php echo $exist_markers; ?&gt;                     &lt;?php endif; ?&gt;                 &lt;/div&gt;                 &lt;?php if (isset($cat_link)): ?&gt;                     &lt;div class="tags"&gt;                         &lt;a href="&lt;?php echo $cat_link; ?&gt;" class="tags__link"&gt;                         &lt;span&gt;                             &lt;?php echo $primary_category-&gt;name; ?&gt;                         &lt;/span&gt;                         &lt;/a&gt;                     &lt;/div&gt;                 &lt;?php endif; ?&gt;             &lt;/div&gt;             &lt;div class="title"&gt; 				&lt;span&gt; 					&lt;?php //echo get_the_title($single_post-&gt;ID); ?&gt; 					&lt;?php echo get_the_title(); ?&gt; 				&lt;/span&gt;             &lt;/div&gt;             &lt;div class="share"&gt;                 &lt;div class="date"&gt; 					&lt;span&gt; 						&lt;?php echo date("H:i", strtotime($single_post-&gt;post_date)); ?&gt; 					&lt;/span&gt;                     &lt;span&gt; 						&lt;?php echo date("d.m.Y", strtotime($single_post-&gt;post_date)); ?&gt; 					&lt;/span&gt;                 &lt;/div&gt;             &lt;/div&gt; 			&lt;?php if (function_exists('nvvc_visitors_views_shortcode')) 			{ 			    echo nvvc_visitors_views_shortcode($id); 			} 	        else 			{ 				echo gt_in_post_view($id); 			} 			?&gt;         &lt;/div&gt;         &lt;?php         //$content = apply_filters('the_content', $single_post-&gt;post_content, $single_post-&gt;ID);         ?&gt;         &lt;div class="page-content"&gt;             &lt;?php// echo $content; ?&gt;  			&lt;?php the_content(); ?&gt;             &lt;?php $is_advertising = carbon_get_post_meta($single_post-&gt;ID, 'news_is_advertising'); ?&gt;             &lt;?php if ($is_advertising) : ?&gt;                 &lt;div class="adv__info"&gt;                     &lt;span class="adv_icon__box"&gt;&lt;?php render_advertising_icon(); ?&gt;&lt;/span&gt;                     &lt;span class="adv_text__box"&gt;&lt;?php echo carbon_get_post_meta($single_post-&gt;ID, 'news_text_advertising'); ?&gt;&lt;/span&gt;                 &lt;/div&gt;             &lt;?php endif; ?&gt;         &lt;/div&gt;         &lt;div class="footer-content"&gt;             &lt;div class="author-info"&gt;                 &lt;div class="author-image"&gt;                     &lt;?php echo get_avatar($author_id); ?&gt;                 &lt;/div&gt;                 &lt;div class="author-details"&gt;                     &lt;span class="label"&gt;Автор материалов&lt;/span&gt;                     &lt;span class="name"&gt;&lt;?php echo the_author_meta('display_name', $author_id); ?&gt;&lt;/span&gt;                     &lt;a href="&lt;?php echo get_author_posts_url($author_id); ?&gt;" class="other-posts"&gt;Все новости автора&lt;/a&gt;                 &lt;/div&gt;             &lt;/div&gt;             &lt;?php echo share_links($id); ?&gt;         &lt;/div&gt;     &lt;/div&gt;     &lt;?php }

    &lt;?php require_once(COMPONENTS_PATH . "icons/camera-icon.php"); require_once(COMPONENTS_PATH . "icons/video-content-icon.php"); require_once(COMPONENTS_PATH . 'line-news-list-item.php'); require_once(COMPONENTS_PATH . 'content-exist-markers.php'); function render_news_whole_post($id, $cat = NULL) { $single_post = get_post($id); gt_set_post_view($id); $author_id = $single_post-&gt;post_author; $taxonomies = get_my_taxonomies($id); if (!empty($taxonomies)) { $primary_category = get_post_primary_category($id, $taxonomies); if(!empty($primary_category['primary_category'])){ $primary_category = $primary_category['primary_category']; $cat_link = home_url(); $cat_link .= '/'; $cat_link .= $primary_category-&gt;taxonomy; $cat_link .= '/'; $cat_link .= $primary_category-&gt;slug; } } ?&gt; &lt;div class="post" data-url="&lt;?php echo get_permalink($id)?&gt;"&gt; &lt;div class="post-header"&gt; &lt;div class="content-exists"&gt; &lt;div class="content"&gt; &lt;?php $exist_markers = render_content_exist_markers($id); ?&gt; &lt;?php if ($exist_markers): ?&gt; &lt;?php echo $exist_markers; ?&gt; &lt;?php endif; ?&gt; &lt;/div&gt; &lt;?php if (isset($cat_link)): ?&gt; &lt;div class="tags"&gt; &lt;a href="&lt;?php echo $cat_link; ?&gt;" class="tags__link"&gt; &lt;span&gt; &lt;?php echo $primary_category-&gt;name; ?&gt; &lt;/span&gt; &lt;/a&gt; &lt;/div&gt; &lt;?php endif; ?&gt; &lt;/div&gt; &lt;div class="title"&gt; &lt;span&gt; &lt;?php //echo get_the_title($single_post-&gt;ID); ?&gt; &lt;?php echo get_the_title(); ?&gt; &lt;/span&gt; &lt;/div&gt; &lt;div class="share"&gt; &lt;div class="date"&gt; &lt;span&gt; &lt;?php echo date("H:i", strtotime($single_post-&gt;post_date)); ?&gt; &lt;/span&gt; &lt;span&gt; &lt;?php echo date("d.m.Y", strtotime($single_post-&gt;post_date)); ?&gt; &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;?php if (function_exists('nvvc_visitors_views_shortcode')) { echo nvvc_visitors_views_shortcode($id); } else { echo gt_in_post_view($id); } ?&gt; &lt;/div&gt; &lt;?php //$content = apply_filters('the_content', $single_post-&gt;post_content, $single_post-&gt;ID); ?&gt; &lt;div class="page-content"&gt; &lt;?php// echo $content; ?&gt; &lt;?php the_content(); ?&gt; &lt;?php $is_advertising = carbon_get_post_meta($single_post-&gt;ID, 'news_is_advertising'); ?&gt; &lt;?php if ($is_advertising) : ?&gt; &lt;div class="adv__info"&gt; &lt;span class="adv_icon__box"&gt;&lt;?php render_advertising_icon(); ?&gt;&lt;/span&gt; &lt;span class="adv_text__box"&gt;&lt;?php echo carbon_get_post_meta($single_post-&gt;ID, 'news_text_advertising'); ?&gt;&lt;/span&gt; &lt;/div&gt; &lt;?php endif; ?&gt; &lt;/div&gt; &lt;div class="footer-content"&gt; &lt;div class="author-info"&gt; &lt;div class="author-image"&gt; &lt;?php echo get_avatar($author_id); ?&gt; &lt;/div&gt; &lt;div class="author-details"&gt; &lt;span class="label"&gt;Автор материалов&lt;/span&gt; &lt;span class="name"&gt;&lt;?php echo the_author_meta('display_name', $author_id); ?&gt;&lt;/span&gt; &lt;a href="&lt;?php echo get_author_posts_url($author_id); ?&gt;" class="other-posts"&gt;Все новости автора&lt;/a&gt; &lt;/div&gt; &lt;/div&gt; &lt;?php echo share_links($id); ?&gt; &lt;/div&gt; &lt;/div&gt; &lt;?php }

  • Во всем остальном все в штатном режиме
  • Причина немного другая get_post - вызывает текущую запись, ту которая есть сейчас, и любые изменения которые вы пытаетесь просмотреть из объекта $single_post вы не видите, работает только то, что вызывается через $post глобальный.

    скорее всего надо сделать так:

    function render_news_whole_post( $cat = NULL) {     global $post;   gt_set_post_view($post-&gt;ID);     $author_id = $post-&gt;post_author; // бла-бла-бла }

    function render_news_whole_post( $cat = NULL) { global $post; gt_set_post_view($post-&gt;ID); $author_id = $post-&gt;post_author; // бла-бла-бла }

  • WP Panda, спасибо, но заголовок все также не изменен пока я не сохраню его
  • Роман Страх, а функция внутри цикла?
  • WP Panda, да
    &lt;?php foreach ($meri_posts as $post) : ?&gt; &lt;?php render_news_whole_post($post-&gt;ID); ?&gt; // и далее код исполняется который выше  &lt;?php endforeach; ?&gt;

    &lt;?php foreach ($meri_posts as $post) : ?&gt; &lt;?php render_news_whole_post($post-&gt;ID); ?&gt; // и далее код исполняется который выше &lt;?php endforeach; ?&gt;

  • Роман Страх,

    это не тот цикл, я имел виду основной, подразумевается что это у вас шаблон single или его аналоги

    Тут не понятно откуда берутся $meri_posts

    если из get_posts то надо сделать setup_postdata

  • WP Panda, в точку
    &lt;?php $meri_args = array(     'post_status' =&gt; 'publish',     'posts_per_page' =&gt; 2,     'post_type' =&gt; 'news',     'post__not_in' =&gt; array($post-&gt;ID), );  $meri_posts = get_posts($meri_args); ?&gt;

    &lt;?php $meri_args = array( 'post_status' =&gt; 'publish', 'posts_per_page' =&gt; 2, 'post_type' =&gt; 'news', 'post__not_in' =&gt; array($post-&gt;ID), ); $meri_posts = get_posts($meri_args); ?&gt;

  • Роман Страх, ну я выше ответил
Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Максим Павлов Ответ

Предпросмотр WordPress работает через ревизию/preview-версию текущей записи. Когда Вы используете the_title() и the_content() внутри главного цикла, WordPress сам подставляет данные предпросмотра. Когда Вы вручную берёте другой объект $single_post и читаете $single_post->post_content, Вы обходите эту механику и получаете сохранённую версию из базы.

Поэтому различие нормальное:

  • the_content() — учитывает глобальный пост и фильтры предпросмотра;
  • get_the_title() без ID — берёт текущий пост в цикле;
  • $single_post->post_content — просто поле объекта, без preview-магии;
  • get_the_title($single_post->ID) — может не учитывать несохранённые изменения, если это не preview-объект.

Если Вы строите бесконечную ленту и хотите корректный preview, используйте стандартный цикл там, где это возможно:

while ($query-&gt;have_posts()) {
    $query-&gt;the_post();
    the_title('&lt;h2&gt;', '&lt;/h2&gt;');
    the_content();
}
wp_reset_postdata();

while ($query-&gt;have_posts()) { $query-&gt;the_post(); the_title('&lt;h2&gt;', '&lt;/h2&gt;'); the_content(); } wp_reset_postdata();

Если нужно работать с конкретным объектом, пропускайте контент через фильтры, но понимайте: несохранённые изменения WordPress не обязан подставлять в произвольный объект. Для предпросмотра важны глобальный $post, основной loop и preview hooks.

Вывод: для шаблонов, где важен предпросмотр редактора, не читайте напрямую post_content. Используйте loop-функции WordPress или специально подготавливайте preview-данные.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно