Wiele długości fragmentów w wordpressie


Jak mówi tytuł, szukam fragmentów o wielu długościach w WordPress.
Rozumiem, że możesz to zrobić w functions.php:
function twentyten_excerpt_length( $length ) {
return 15;
}
add_filter( 'excerpt_length', 'twentyten_excerpt_length' );

Chcę wiedzieć, w jaki sposób można mieć ich wiele, z których każdy zwraca inną wartość liczbową, dzięki czemu mogę uzyskać krótkie fragmenty dla pętli bocznych, dłuższe fragmenty dla wybranych pętli i najdłuższy fragment dla głównego artykułu.
Coś jak używanie ich w szablonach:
<?php the_excerpt('length-short') ?>
<?php the_excerpt('length-medium') ?>
<?php the_excerpt('length-long') ?>

Twoje zdrowie,
Dave
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Co powiesz na...
function excerpt($limit) {
$excerpt = explode(' ', get_the_excerpt(), $limit); if (count($excerpt) >= $limit) {
array_pop($excerpt);
$excerpt = implode(" ", $excerpt) . '...';
} else {
$excerpt = implode(" ", $excerpt);
} $excerpt = preg_replace('`\[[^\]]*\]`', '', $excerpt); return $excerpt;
}function content($limit) {
$content = explode(' ', get_the_content(), $limit); if (count($content) >= $limit) {
array_pop($content);
$content = implode(" ", $content) . '...';
} else {
$content = implode(" ", $content);
} $content = preg_replace('/\[.+\]/','', $content);
$content = apply_filters('the_content', $content);
$content = str_replace(']]>', ']]&>', $content); return $content;
}

następnie w szablonie kodu wystarczy użyć ...
<?php echo excerpt(25); ?>

od:

http://bavotasan.com/tutorials ... press
http://bavotasan.com/tutorials ... ress/
/
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Na razie możesz zaktualizować odpowiedź Marty'ego:
function excerpt($limit) {
return wp_trim_words(get_the_excerpt(), $limit);
}

Możesz również zdefiniować niestandardowy link „czytaj więcej” w następujący sposób:
function custom_read_more() {
return '... <a class="read-more" href="'.get_permalink(get_the_ID()).'">more&nbsp;&raquo;[/url]';
}
function excerpt($limit) {
return wp_trim_words(get_the_excerpt(), $limit, custom_read_more());
}
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Oto, co wymyśliłem.
Dodaj to do swojego
functions.php
class Excerpt {// Default length (by WordPress)
public static $length = 55;// So you can call: my_excerpt('short');
public static $types = array( 'short' => 25,
'regular' => 55,
'long' => 100
);/**
* Sets the length for the excerpt,
* then it adds the WP filter
* And automatically calls the_excerpt();
*
* @param string $new_length
* @return void
* @author Baylor Rae'
*/
public static function length($new_length = 55) {
Excerpt::$length = $new_length; add_filter('excerpt_length', 'Excerpt::new_length'); Excerpt::output();
}// Tells WP the new length
public static function new_length() {
if( isset(Excerpt::$types[Excerpt::$length]) )
return Excerpt::$types[Excerpt::$length];
else
return Excerpt::$length;
}// Echoes out the excerpt
public static function output() {
the_excerpt();
}}// An alias to the class
function my_excerpt($length = 55) {
Excerpt::length($length);
}

Może być używany w ten sposób.
my_excerpt('short');// calls the defined short excerpt lengthmy_excerpt(40);// 40 chars

Jest to najłatwiejszy sposób, jaki znam, aby dodać filtry, które można wywołać z pojedynczej funkcji.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Szukałem również tej funkcji, a większość funkcji tutaj jest dobra i elastyczna.
W moim przypadku szukałem rozwiązania, które pokazywałoby tylko inną długość fragmentu na niektórych stronach. Używam tego:
function custom_excerpt_length( $length ) {
return (is_front_page()) ? 15 : 25;
}
add_filter( 'excerpt_length', 'custom_excerpt_length', 999 );

Wklej ten kod do pliku functions.php motywów.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Wracając do odpowiedzi Marty'ego:
Wiem, że od opublikowania tej odpowiedzi minął ponad rok, ale lepiej późno niż wcale. Aby to działało poza domyślnym 55 WordPressa, musisz zastąpić ten wiersz:
$excerpt = explode(' ', get_the_excerpt(), $limit);

z tą linią:
$excerpt = explode(' ', get_the_content(), $limit);

W przeciwnym razie funkcja działa tylko z już wyciętym fragmentem tekstu.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Możesz dodać tę funkcję do swojego pliku functions.php
function custom_length_excerpt($word_count_limit) {
$content = wp_strip_all_tags(get_the_content() , true );
echo wp_trim_words($content, $word_count_limit);
}

Następnie nazwij to w swoim szablonie w ten sposób
<?php custom_length_excerpt(50); ?>

wp_strip_all_tags
powinno zapobiegać przedostawaniu się losowych tagów html na stronę.
Dokumentacja funkcji
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Myślę, że możemy teraz używać
wp_trim_words

cm.
http://codex.wordpress.org/Fun ... words
Nie jestem pewien, jakie dodatkowe dane dotyczące ekranowania i dezynfekcji są wymagane do korzystania z tej funkcji, ale wygląda to interesująco.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Oto prosty sposób na ograniczenie treści lub fragmentu.
$content = get_the_excerpt();
$content = strip_tags($content);
echo substr($content, 0, 255);

zmień get_the_excerpt () na get_the_content (), jeśli potrzebujesz treści.
z szacunkiem
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Uważaj na niektóre z tych metod. Nie wszystkie z nich usuwają tagi HTML, co oznacza, że ​​jeśli ktoś wstawi link wideo (lub adres URL) w pierwszym zdaniu swojego posta, wideo (lub link) pojawi się we fragmencie, prawdopodobnie wysadzając Twoją stronę.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Myślę, że można stworzyć krótki kod, nie próbowałem, ale napisałem dla Ciebie podstawowy pomysł na jego strukturę
function twentyten_excerpt_length($atts,$length=null){
shortcode_atts(array('exlength'=>'short'),$atts); if(!isset($atts['exlength']) || $atts['exlength'] == 'short') {
return 15;
}elseif( $atts['exlength'] == 'medium' ){
return 30;// or any value you like
}elseif( $atts['exlength'] == 'long' ){
return 45;// or any value you like
}else{
// return nothing
}
}add_shortcode('the_excerpt_sc','twentyten_excerpt_length');

więc możesz go używać w ten sposób
[the_excerpt_sc exlength="medium"]
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Użyj zaawansowanego fragmentu
http://wordpress.org/extend/pl ... erpt/
http://wordpress.org/extend/pl ... erpt/
podłącz. Odpowiedź znalazłem również na tej stronie.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Wiem, że to naprawdę stary temat, ale właśnie zmagałem się z tym problemem i żadne z rozwiązań, które znalazłem w Internecie, nie działało zgodnie z oczekiwaniami. Po pierwsze, mój własny filtr „excerpt_more” był zawsze wyłączony.
Sposób, w jaki rozwiązałem ten problem, jest cholernie brzydki, ale to jedyne działające rozwiązanie, jakie udało mi się znaleźć. Brzydota polega na zmianie 4 linii rdzenia WP (!!) + za pomocą innej zmiennej globalnej (chociaż WP już robi tak dużo, że nie czuję się źle).
Zmieniłem
wp_trim_excerpt
w wp-include/formatting.php na to:
<?php
function wp_trim_excerpt($text = '') {
global $excerpt_length;
$len = $excerpt_length > 0 ? $excerpt_length : 55;
$raw_excerpt = $text;
if ( '' == $text ) {
$text = get_the_content(''); $text = strip_shortcodes( $text ); $text = apply_filters('the_content', $text);
$text = str_replace(']]>', ']]&>', $text);
$excerpt_length = apply_filters('excerpt_length', $len);
$excerpt_more = apply_filters('excerpt_more', ' ' . '[&hellip;]');
$text = wp_trim_words( $text, $excerpt_length, $excerpt_more );
}
$excerpt_length = null;
return apply_filters('wp_trim_excerpt', $text, $raw_excerpt);
}

Jedyne nowe bity to bity
$ excerpt_length
i
$ len
.
Teraz, jeśli chcę zmienić domyślną długość, robię to w moim szablonie:
<?php $excerpt_length = 10; the_excerpt() ?>

Zmiana jądra to straszna decyzja, dlatego chciałbym wiedzieć, czy ktoś wymyśli coś lepszego.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Zrobiłbym tak:
function _get_excerpt($limit = 100) {
return has_excerpt() ? get_the_excerpt() : wp_trim_words(strip_shortcodes(get_the_content()),$limit);
}


Za pomocą

:
echo _get_excerpt(30);// Inside the loop/query


Dlaczego?

  • Jeśli
    has_excerpt
    powinien zwrócić to przejście
  • Tak więc nie jest przyciąć słowa / usuń skróty z
    the_content
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Znalazłem świetną wtyczkę, która może to zrobić-

ograniczenie treści i fragmentów słów
http://wordpress.org/extend/pl ... imit/
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Tutaj
http://smallenvelop.com/limit- ... ress/
Zobacz artykuł na temat korzystania z niestandardowej długości paska w WordPress.
Istnieje kilka sposobów ograniczenia długości ekspozycji punktu kontroli & amp;.
  • Ogranicz długość fragmentu posta lub długość treści posta za pomocą liczby słów.
  • Ograniczenie długości fragmentu do kilku znaków.
  • Ogranicz wznawianie publikowania, dodając więcej tagu do czytania.
  • Dołącz niestandardowy fragment, aby napisać własne CV dla każdego postu.
  • Kontroluj długość klipu za pomocą filtrów

http://smallenvelop.com/limit- ... ress/
http://smallenvelop.com/limit- ... ress/
mam nadzieję, że to ci bardzo pomoże.

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się