Использование the_excerpt внутри файла шаблона плагина

16 июн. 2011 г., 12:00:10
Просмотры: 516
Голосов: 0

Я пытаюсь использовать 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', 'Тип недвижимости: ', ' ', '' ),'&nbsp;&nbsp;&nbsp;' . get_the_term_list( $post_id, 'location', 'Местоположение: ', ' ', '' ),'&nbsp;&nbsp;&nbsp;'.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', 'Тип недвижимости: ', ' ', '' ),'&nbsp;&nbsp;&nbsp;' . get_the_term_list( $post_id, 'location', 'Местоположение: ', ' ', '' ),'&nbsp;&nbsp;&nbsp;' . 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', 'Тип недвижимости: ', ' ', '' ),'&nbsp;&nbsp;&nbsp;' . get_the_term_list( $post_id, 'location', 'Местоположение: ', ' ', '' ),'&nbsp;&nbsp;&nbsp;' . 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
Без the_excerpt

0
Все ответы на вопрос 1
7

Вы делаете несколько ошибок:

  1. the_excerpt не использует ID записи.
  2. При изменении глобальной переменной $post, вы всегда должны возвращать её исходное значение.
  3. Вы присваивали результат 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', 'Тип недвижимости: ', ' ', '' ),'&nbsp;&nbsp;&nbsp;' .get_the_term_list( $post_id, 'location', 'Местоположение: ', ' ', '' ),'&nbsp;&nbsp;&nbsp;'.get_the_term_list( $post_id, 'region', 'Регион: ', ' ', '' );
                                            echo '</span></h3>';
                                        } 
                                    ?>
                                            </div><!-- / homepage_props_tax -->
16 июн. 2011 г. 12:21:56
Комментарии

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

MartinJJ MartinJJ
16 июн. 2011 г. 13:01:41

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

Hameedullah Khan Hameedullah Khan
16 июн. 2011 г. 13:31:59

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

MartinJJ MartinJJ
16 июн. 2011 г. 13:37:26

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

Hameedullah Khan Hameedullah Khan
16 июн. 2011 г. 13:48:58

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

MartinJJ MartinJJ
16 июн. 2011 г. 13:54:20

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

Hameedullah Khan Hameedullah Khan
16 июн. 2011 г. 17:10:30

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

MartinJJ MartinJJ
16 июн. 2011 г. 17:42:56
Показать остальные 2 комментариев