Использование the_excerpt внутри файла шаблона плагина
Я пытаюсь использовать the_excerpt внутри файла шаблона плагина. Плагин - wp-favorite-posts. По умолчанию плагин только выводит заголовки сохраненных записей. Мне удалось вывести все: таксономии, изображения и т.д., но возникли проблемы с the_excerpt. Когда я добавляю <?php the_excerpt( $post_id ); ?>
в код, происходит бесконечный цикл вывода избранных записей без вывода краткого описания.
Я использую global $post
чтобы получить всю информацию (кроме краткого описания).
<?php
global $post;
if (!empty($user)):
if (!wpfp_is_user_favlist_public($user)):
echo "Избранные записи пользователя $user.";
else:
echo "Список пользователя $user не является публичным.";
endif;
endif;
if ($wpfp_before):
echo "<p>".$wpfp_before."</p>";
endif;
if ($favorite_post_ids):
foreach ($favorite_post_ids as $post_id) {
$p = get_post($post_id); ?>
<div class="homepage_props">
<div class="homepage_props_inner">
<div class="homepage_propsbanner">
<div class="homepage_new">
<?php if (strtotime($post->post_date) > strtotime('-7 days')) { ?>
<img src="<?php echo get_template_directory_uri(); ?>/images/new.png" alt="Новые объявления о недвижимости" title="Последние добавленные объекты недвижимости" />
<?php } ?>
</div>
<h2>
<span style="float:left; font-weight:bold;">
<?php
if ( 'sales' == get_post_type($post_id) ) {
echo 'Недвижимость на продажу';
} elseif ( 'rentals' == get_post_type($post_id) ) {
echo 'Недвижимость в аренду';
} elseif ( 'business' == get_post_type($post_id) ) {
echo 'Бизнес на продажу</span>';
} elseif ( 'bandb' == get_post_type() ) {
echo 'Гостевые дома и B&B</span>';
}
?>
</span>
<span style="float:right; font-weight:normal;">
<a href="<?php echo get_permalink($post_id); ?>" title="<?php printf( esc_attr__( 'Постоянная ссылка на %s', 'themename' ), the_title_attribute( 'echo=0' ) ); ?>" rel="bookmark"><?php echo get_the_title ( $post_id ); ?></a>
</span>
</h2>
</div>
<div class="clear"></div>
<div class="homepage_props_image">
<?php
echo "<a href='".get_permalink($post_id)."'>";
echo get_the_post_thumbnail ( $post_id, 'medium' );
echo "</a>";
?>
</div><!-- / homepage_props_image -->
<div class="homepage_props_info hyphenate">
<!-- здесь я пытаюсь добавить the_excerpt -->
</div><!-- / homepage_props_info -->
<div class="clear"></div>
<div class="homepage_props_tax">
<?php
if ( 'sales' == get_post_type($post_id) ) {
echo '<h3><span style="float:right; font-weight:normal;">' . get_the_term_list( $post_id, 'property_type', 'Тип недвижимости: ', ' ', '' ),' ' . get_the_term_list( $post_id, 'location', 'Местоположение: ', ' ', '' ),' '.get_the_term_list( $post_id, 'region', 'Регион: ', ' ', '' );
} elseif ( 'rentals' == get_post_type($post_id) ) {
echo '<h3><span style="float:right; font-weight:normal;">' . get_the_term_list( $post_id, 'property_type', 'Тип недвижимости: ', ' ', '' ),' ' . get_the_term_list( $post_id, 'location', 'Местоположение: ', ' ', '' ),' ' . get_the_term_list( $post_id, 'region', 'Регион: ', ' ', '' );
} elseif ( 'business' == get_post_type($post_id) ) {
echo '<h3><span style="float:right; font-weight:normal;">' . get_the_term_list( $post_id, 'property_type', 'Тип недвижимости: ', ' ', '' ),' ' . get_the_term_list( $post_id, 'location', 'Местоположение: ', ' ', '' ),' ' . get_the_term_list( $post_id, 'region', 'Регион: ', ' ', '' );
}
?>
</span></h3>
</div><!-- / homepage_props_tax -->
</div><!-- / homepage_props_inner -->
</div><!-- / homepage_props -->
<?php
}
else:
echo $wpfp_options['favorites_empty'];
endif; ?>
<span style="float:left; font-size:0.7em;"><?php wpfp_clear_list_link(); ?></span>
<?php wpfp_cookie_warning(); ?>
Первое изображение - с использованием the_excerpt
Второе изображение - без the_excerpt
Вы делаете несколько ошибок:
- the_excerpt не использует ID записи.
- При изменении глобальной переменной $post, вы всегда должны возвращать её исходное значение.
- Вы присваивали результат get_post переменной $p, которая не использовалась в вашем коде.
Я внес несколько исправлений в ваш код. Код ниже - это копия вашего кода с моими исправлениями, так что попробуйте его и сообщите, если у вас всё ещё будут проблемы. Извините, мне пришлось немного изменить форматирование вашего кода.
<?php
if (!empty($user)):
if (!wpfp_is_user_favlist_public($user)):
echo "Избранные записи пользователя $user.";
else:
echo "Список пользователя $user не является публичным.";
endif;
endif;
if ($wpfp_before):
echo "<p>".$wpfp_before."</p>";
endif;
if ($favorite_post_ids):
foreach ($favorite_post_ids as $post_id) {
$p = get_post($post_id);
?>
<div class="homepage_props">
<div class="homepage_props_inner">
<div class="homepage_propsbanner">
<div class="homepage_new">
<?php if (strtotime($p->post_date) > strtotime('-7 days')) { ?>
<img src="<?php echo get_template_directory_uri(); ?>/images/new.png" alt="новые объявления о недвижимости" title="новые объявления о недвижимости" />
<?php } ?>
</div>
<h2><span style="float:left; font-weight:bold;">
<?php
if ( 'sales' == $p->post_type ) {
echo 'Недвижимость на продажу';
} elseif ( 'rentals' == $p->post_type ) {
echo 'Недвижимость в аренду';
} elseif ( 'business' == $p->post_type ) {
echo 'Бизнес на продажу';
} elseif ( 'bandb' == $p->post_type ) {
echo 'Гостевой дом';
}
?>
</span>
<span style="float:right; font-weight:normal;">
<a href="<?php echo get_permalink($post_id); ?>" title="<?php printf( esc_attr__( 'Постоянная ссылка на %s', 'themename' ), get_the_title( $post_id ) ); ?>" rel="bookmark"><?php echo get_the_title ( $post_id ); ?></a>
</span>
</h2>
</div>
<div class="clear"></div>
<div class="homepage_props_image">
<?php
echo "<a href='".get_permalink($post_id)."'>";
echo get_the_post_thumbnail ( $post_id, 'medium' );
echo "</a>";
?>
</div><!-- / homepage_props_image -->
<div class="homepage_props_info hyphenate">
<?php echo $p->post_excerpt; ?>
</div><!-- / homepage_props_info -->
<div class="clear"></div>
<div class="homepage_props_tax">
<?php
if ( in_array( $p->post_type, array( 'sales', 'rentals', 'business' ) ) ) {
echo '<h3><span style="float:right; font-weight:normal;">' .get_the_term_list( $post_id, 'property_type', 'Тип недвижимости: ', ' ', '' ),' ' .get_the_term_list( $post_id, 'location', 'Местоположение: ', ' ', '' ),' '.get_the_term_list( $post_id, 'region', 'Регион: ', ' ', '' );
echo '</span></h3>';
}
?>
</div><!-- / homepage_props_tax -->

Спасибо, Хамидулла, что нашли время помочь. Я попробовал ваш код, но проблема осталась. Я отредактировал свой начальный пост, чтобы показать ошибку. На первом изображении показано, что происходит, когда в коде используется the_excerpt, а на втором — как это выглядит, когда excerpt отсутствует в коде. Оба ваших и моего способа приводят к одинаковой ошибке... С уважением.

@Martin, я внес изменения в код в своем ответе, чтобы использовать $post->post_excerpt
вместо the_excerpt
. Пожалуйста, попробуйте его, чтобы убедиться.

@Hameedullah спасибо, это остановило зацикливание, которое показано на изображениях выше, но теперь отображается только CSS без значений, таких как thumbnail, titles, excerpt и т.д..

@Martin, что ты имеешь в виду под "остался только css"? Сломано форматирование или что-то другое? Попробуй echo strip_tags( $post->post_excerpt );

@Hameedullah говоря "остался только css", наверное, мне следовало выразиться яснее - у меня html отображается на странице как положено, но ни динамические элементы (текст и миниатюра) не подгружаются, так что в итоге у меня просто пустой, но стилизованный div. Последний фрагмент кода, который ты предоставил, также не выводит ничего через php... извини за потраченное время, но я это ценю.. честно говоря, я в полном недоумении, как это исправить

@Martin проверь обновленный код. Я провел дополнительную очистку. Тебе больше не нужно модифицировать глобальную переменную $post.

отлично... теперь данные возвращаются как должны, но только если таблица post_excerpt используется в wp-admin, ничего не возвращается, если эта таблица пуста, но я могу что-то с этим сделать, добавив это в параметры поста (отправка с фронта) из содержимого поста и сократив длину.. Огромное спасибо за ваше время, Хамидулла, это очень ценно..
