Jak zmienić długość wpisu w funkcji the_excerpt(); na WP?

Witam. Potrzebuję utworzyć na swojej stronie box wyświetlający najpopularniejsze wpisy w danej kategorii. W boxie będą trzy mniejsze boxy, a każdy z nich powinien zawierać nagłówek wpisu, miniaturkę i początek tekstu z tego wpisu. Znalazłem, że używa się do tego funkcji the_excerpt(); jednak pojawia się z nią u mnie pewien problem. Boxy są obok siebie i niesymetrycznie wyglądają jeśli ilość treści w nich jest nierówna… Chciałbym zmniejszyć ilość słów/znaków w tej funkcji the_excerpt(); (bo potrzebuję wypluć w zasadzie po 2 zdania), bądź zastąpić ją inną, ewentualnie jakimś lekkim pluginem. Jakieś pomysły?

Najlepsza odpowiedź

Funkcja the_excerpt(); wyświetla domyślnie 55 słów.
Co prawda nie do końca rozumiem o co chodzi z boksami, ale na zmianę ilości znaków w the_excerpt(); znam dwa proste sposoby:

  • użycie zamiast niej np. Advanced Custom Fields
  • nadpisanie jej w pliku functions.php Twojej skórki na WP

Sposób pierwszy: być może korzystasz z bardzo popularnej wtyczki do własnych pól jaką jest ACF. Często jeśli WordPressowe funkcje, filtry czy hooki nie spełniały do końca moich oczekiwań to starałem się je jakoś obejść. Tak też można zrobić w Twoim przypadku: do postu dodać pole tekstowe (np. wraz z instrukcją dla copywritera), żeby podczas dodawania postu wybierać odpowiednią ilość znaków i wklejać w to pole. Zawartość pola wypluwasz sobie w swoich boksach (zamiast wycinka z treści) i masz pewność że będzie równo (bo przecież sam wybierasz ilość treści jaką wklejasz w pole).
Sposób drugi: dodaj poniższego gotowca do pliku functions.php w Twoim motywie WP:

function get_excerpt($limit, $source = null){
    if($source == "content" ? ($excerpt = get_the_content()) : ($excerpt = get_the_excerpt()));
    $excerpt = preg_replace(" (\[.*?\])",'',$excerpt);
    $excerpt = strip_shortcodes($excerpt);
    $excerpt = strip_tags($excerpt);
    $excerpt = substr($excerpt, 0, $limit);
    $excerpt = substr($excerpt, 0, strripos($excerpt, " "));
    $excerpt = trim(preg_replace( '/\s+/', ' ', $excerpt));
    $excerpt = $excerpt.'[...]';
    return $excerpt;
}

Teraz w miejscach gdzie zwykle używałeś funkcji the_excerpt(); zastosuj taki kod:

	<?php echo get_excerpt(20); ?>

Gdzie w nawiasie definiujesz ilość znaków jaką chcesz pobrać z początku posta. W powyższym kodzie liczba 20 to przykładowa ilość znaków wymyślona przeze mnie. Jak to się mówi w naszej branży: sprawdzałem i u mnie działa 🙂.

Forum dla programistów, wordpressowców - obrazek poglądowy
Subscribe
Powiadom o
guest
5 komentarzy
Inline Feedbacks
View all comments
Emil
Emil

Dobrze że autor wątku chciał zmniejszyć ilość znaków, bo funkcja która jest tutaj pokazana w functions.php tylko ogranicza ilość znaków. Z tego co się orientuję więcej niż 55 słów nie wyplujesz. Nawet jeśli w nawias dasz wartość 10 000 to tyle nie zaciągnie. Jeszcze lepiej że w przyklejonej odpowiedzi pokazane jest 'obejście tematu’ za pomocą ACF – tutaj ograniczeń już nie ma ; )

Tobi
Tobi
W odpowiedzi do  Emil

ACF zawsze d… ratuje 😀

Patryk
Patryk

A dlaczego by nie użyć wp_trim_words()?

developer.wordpress.org/reference/functions/wp_trim_words/

Artur
Artur
W odpowiedzi do  Patryk

Trzeci sposób 😉

Witek
Witek

<div class=”entry-content”>       <?php if ( is_search() AND has_excerpt( $post->ID ) ) {          the_excerpt();       } else {          the_content( sprintf(             __( 'Continue reading %s’, 'blogolife’ ),             the_title( '<span class=”screen-reader-text”>’, '</span>’, true )       ) );       }       wp_link_pages( array(          'before’     => '<div class=”page-links”><span class=”page-links-title”>’ . __( 'Pages:’, 'blogolife’ ) . '</span>’,          'after’      => '</div>’,          'link_before’ => '<span>’,          'link_after’ => '</span>’,          'pagelink’   => '<span class=”screen-reader-text”>’ . __( 'Page’, 'blogolife’ ) . ’ </span>%’,          'separator’  => '<span class=”screen-reader-text”>, </span>’,       ) );          if (get_theme_mod( 'blogolife_show_hide_post_categories’ ) === 'on’ ) {             blogolife_entry_taxonomies_categories();          }          if (get_theme_mod( 'blogolife_show_hide_post_tags’ ) === 'on’ ) {             blogolife_entry_taxonomies_tags();          }       ?>    </div><!– .entry-content –> Po zmianie the_content na the_excerpt i wejściu… Czytaj więcej »

Ta strona korzysta z ciasteczek. Więcej informacji

The cookie settings on this website are set to "allow cookies" to give you the best browsing experience possible. If you continue to use this website without changing your cookie settings or you click "Accept" below then you are consenting to this.

Close