robiniknight
  • 0
Новичок

ПОЛУЧИТЬ выдержку по ID

  • 0

Почему нельзя получить отрывок по ID, как с заголовком и большинством других элементов.

например. get_the_excerpt(ID). Я знаю, как использовать его с функцией $post->post_excerpt, но она не возвращает часть содержимого, если выдержка не была введена, просто ничего не возвращает.

Итак, что я пытаюсь сделать, так это получить отрывок по идентификатору, если отрывок есть, и если отрывка с этим идентификатором нет, но есть какой-то контент, вместо этого получить часть контента.

Как бы это сделать.

Есть идеи,

Чудесный…

РЕДАКТИРОВАТЬ —

Исходный код цикла по запросу.

<?php $stories = get_posts('category_name=feedback&numberposts=4'); 
            foreach ($stories as $post) :
            $title = $post->post_title;
            $excerpt = get_the_excerpt_id($post->ID);
            $thumb = get_the_post_thumbnail($post->ID,array(60, 60, true));?>
              <div class="textstandard_white" style="font-size:14px; line-height:22px; padding-top:10px;"><b><a href="<?php echo get_permalink($post->ID);?>"><?php echo $title;?></a></b></div><div align="left" style="height:18px; width:82px; background:url(http://www.divethegap.com/update/z-images/structure/icons/stars.png) left top no-repeat;"><div id="stars<?php echo $post->ID;?>" align="left" style="height:18px; background:url(http://www.divethegap.com/update/z-images/structure/icons/stars_glow.png) left top no-repeat;">
                  </div>
                  </div>

                  <script type="text/javascript">
                var width<?php echo $post->ID;?> = ((<?php
$Rating = get_post_meta($post->ID, "Rating", true);
echo $Rating;
?> * 20) + '%')
                  $('#stars<?php echo $post->ID;?>').css('width', width<?php echo $post->ID;?>);

                 </script><div class="textstandard_white" style="padding-top:6px; font-size:10px; color:#BBB; padding-bottom:10px; border-bottom:1px dotted #BBB; min-height:70px;"><div style="float:left; padding-right:6px; padding-bottom:6px;"><div style="background:#FFF; border:1px solid #FFF;
border-radius: 4px; -moz-border-radius: 4px ; -webkit-border-radius: 4px; padding:4px;"><a href="<?php echo get_permalink($post->ID);?>"><?php echo $thumb;?></a></div></div>



<?php echo $excerpt;?></div>
              <?php endforeach;?>
Share
  1. что именно является «некоторым» из контента?

    • 0
  2. Привет @Робин И. Найт:

    Я рассматриваю get_the_excerpt() как функцию с устаревшим дизайном. По мере роста использования WordPress появляется много новых вариантов использования, где он не подходит, но где новые функции для получения разных данных подходят. Одним из примеров является частое использование $args массива опций функций.

    Но это легко исправить для ваших нужд. Вот альтернативная функция, которую вы можете использовать, которую вы можете поместить в любое место в functions.php файле вашей темы:

    function robins_get_the_excerpt($post_id) {
      global $post;  
      $save_post = $post;
      $post = get_post($post_id);
      $output = get_the_excerpt();
      $post = $save_post;
      return $output;
    }
    

    Я не проверял, но уверен, что понял правильно. Если это не соответствует вашим потребностям, пожалуйста, уточните, и, возможно, я могу сделать другие предложения.

    • 0
  3. Механика выдержки крайне запутанная. Это не точный ответ на ваш вопрос, но в целом, если вам нужно сделать теги шаблона, специфичные для Loop, работать с возвращаемым массивом, get_posts() вы можете эмулировать Loop следующим образом:

    $stories = get_posts(); 
    
    foreach ($stories as $post) {
    
        setup_postdata($post);
    
        // stuff
    }
    wp_reset_postdata();
    
    • 0
  4. С версии 3.3.0 появилась новая функция: wp_trim_words.

    Я использую его вне цикла следующим образом:

     <?php if ( $post_id ) {
     $post = get_post( $post_id );
     if ( $post ) { ?>
         <h2><?php echo $post->post_title; ?></h2>
         <p><em><?php echo wp_trim_words( $post->post_content ); ?></em></p>
         <p><strong>This article can only be read by subscribers.</strong></p>
     <?php } } ?>
    

    Это не следует путать с wp_trim_excerpt, который, по-видимому, работает только внутри цикла, так как внутри он вызывает the_content().

    • 0
  5. Просто чтобы добавить к ответу Майка Шинкеля, который по какой-то причине не сработал бы для меня. Мне пришлось добавить строку setup_postdata, чтобы она заработала.

    function get_the_excerpt( $post_id ){
    
      global $post;  
      $save_post = $post;
      $post = get_post($post_id);
      setup_postdata( $post ); // hello
      $output = get_the_excerpt();
      $post = $save_post;
      return $output;
    

    }

    Я предполагаю, что если вы используете это вне цикла, это не должно мешать другим происходящим setup_postdata.

    Ваше здоровье

    • 0
  6. Основываясь на ответе @Maxime, это сработает?

    $post = get_post( $id );
    
    $excerpt = ( $post->post_excerpt ) ? $post->post_excerpt : $post->post_content;
    

    Мне это кажется достаточно прямым, но мне интересно, не упускаю ли я что-то.

    • 0
  7. Если ВСЕ ваши сообщения имеют <!--more--> тег, вы можете использовать следующее с кодом выше:

    $sjc_excerpt = explode( '<!--more-->', $post->post_content); 
    echo wpautop( $sjc_excerpt[0] );
    

    Конечно, если у вас есть сообщения без <!--more--> тега, они будут показаны целиком. В моей ситуации работает, но не у всех…

    • 0
  8. Я рассматриваю get_the_excerpt() как функцию с устаревшим дизайном. По мере роста использования WordPress появляется много новых вариантов использования, где он не подходит, но где новые функции для получения разных данных подходят. Одним из примеров является частое использование $args массива опций функций.

    Но это легко исправить для ваших нужд. Вот альтернативная функция, которую вы можете использовать, которую вы можете поместить в любое место в functions.php файле вашей темы:

    function robins_get_the_excerpt($post_id) {
       global $post;  
       $save_post = $post;
       $post = get_post($post_id);
       $output = get_the_excerpt();
       $post = $save_post;
       return $output;
    }
    

    Просто чтобы добавить к ответу Майка Шинкеля, который по какой-то причине не сработал бы для меня. Мне пришлось добавить строку setup_postdata, чтобы она заработала.

    • 0
  9. Это небольшой двухстрочный текст, который я часто использую, используя wp_trim_words. Я постоянно обнаруживаю, что нуждаюсь в аббревиатуре и читаю больше функций вне цикла. Кто-то еще может найти это полезным. Итак, это то, что я использую для:

    1. Получить выписку по POST ID
    2. Получить содержание поста Если отрывок не задан,
    3. Установите длину слова отрывка
    4. Выберите содержание для Подробнее (ссылка/текст)

    Я поместил это в строку, прямо в настраиваемый шаблон, который редактирую.

        //Get Post Object
        $dapost = get_post(POST_ID);              
        //Get the Execerpt
        $my_excerpt = wp_trim_words( apply_filters( "the_excerpt", get_the_excerpt($dapost) ? get_the_excerpt($dapost) : $dapost->post_content  ), "20", "<a href='$dapost->guid'> ".__('Get More Stuff', 'translation')."</a>" );
    

    Авария

    1. Содержание выдержки

    Получите отрывок по идентификатору сообщения, но получите содержимое сообщения, если отрывок не был установлен.

    Я использую сокращение If/Else PHP.

        $dapost = get_post(POST_ID);    
        apply_filters( "the_excerpt", get_the_excerpt($dapost) ? get_the_excerpt($dapost) : $dapost->post_content
    

    2. Длина слова

    Установите количество слов в выдержке на 20

        "20"
    

    3. Выберите «Читать больше контента» (ссылка/текст).

       "<a href='$dapost->guid'> ".__('Get More Stuff', 'translation')."</a>"
    

    Раньше я $dapost->guid получал URL-адрес, потому что мне не нужны были понятные URL-адреса, и я хотел избежать еще одного обращения к БД. Вы всегда можете использовать get_the_permalink.

    См. wp_trim_words в документации WordPress.

    • 0
  10. Это сработало для меня:

    $excerpt = apply_filters('the_excerpt', get_post_field('post_excerpt', $post_ide));
    
    • 0
  11. Начиная с WP 4.5.0 возможно использование идентификатора сообщения в качестве параметра.get_the_excerpt( $post->ID )

    Источник: https://developer.wordpress.org/reference/functions/get_the_excerpt/

    • 0
  12. Как бы это ни раздражало, на самом деле это довольно просто сделать

    function cameronjonesweb_get_excerpt_by_id( $post_id ) {
        return apply_filters( 'get_the_excerpt', wp_trim_excerpt( '', $post_id ), $post_id );
    }
    
    • 0

Оставить ответ

You must login to add an answer.