Dlaczego nie można uzyskać fragmentu dokumentu tożsamości, tak jak w przypadku tytułu i większości innych elementów.
na przykład. get_the_excerpt (ID). Wiem, jak używać go z funkcją $ post-> post_excerpt, ale to nie zwraca części treści, jeśli nie wprowadzono żadnego fragmentu, zwykłe nic nie zwraca.
Więc próbuję uzyskać fragment według ID, jeśli istnieje fragment, a jeśli nie ma fragmentu z tym identyfikatorem, ale jest trochę treści, zamiast tego mam trochę zawartości.
Jak by to zrobić.
Jakieś pomysły,
Cudowne ...
EDYTOWAĆ --
Pętla Kod źródłowy zgodnie z żądaniem.
<?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;?>
Odpowiedzi:
Cześć @Robin I. Knight:
Widzę
get_the_excerpt()
jako funkcję ze starszym designem. W miarę wzrostu wykorzystania WordPress istnieje wiele nowszych przypadków użycia, w których nie pasuje, ale w których działają nowsze funkcje pobierania różnych danych. Jednym z przykładów jest obecnie częste stosowanie$args
tablicy opcji funkcji.Ale łatwo to naprawić dla twoich potrzeb. Oto alternatywna funkcja, której możesz użyć, którą możesz umieścić w dowolnym miejscu
functions.php
pliku motywu :Nie przetestowałem tego, ale jestem pewien, że dobrze to zrozumiałem. Jeśli to nie zaspokoi twoich potrzeb, opracuj je, a może dam Ci inne sugestie.
źródło
setup_postdata($post)
na początku swojej pętli, jak sugeruje @Rarst. Jeśli to nie zadziała, może to być wtyczka, którą musisz wyłączyć; próbowałeś tego? I prawdopodobnie nie chcesz tego nazywać,get_the_excerpt_id()
ponieważ WordPress mógłby dodać tę funkcję w przyszłości i uszkodzić twoją stronę. I prawdopodobnie mógłbyś obejść się bez funkcji w swojej pętli, używającforeach($stories as $story): global $post; $post = $story;
zamiast tego.Mechanika fragmentu jest bardzo myląca. To nie jest dokładna odpowiedź na twoje pytanie, ale ogólnie, jeśli chcesz utworzyć tagi szablonu, specyficzne dla Loop, pracować z zwróconą przez
get_posts()
ciebie tablicą , możesz emulować Loop w następujący sposób:źródło
setup_postdata()
nie dotyczy to tylko globalnego zapytania i należy zresetować tylko dane postu.Pojawiła się nowa funkcja od 3.3.0: wp_trim_words
Używam go poza pętlą w następujący sposób:
Nie należy tego mylić z wp_trim_excerpt, który najwyraźniej działa tylko w pętli, ponieważ wywołuje wewnętrznie metodę the_content ().
źródło
Wystarczy dodać do odpowiedzi MikeSchinkela, która z jakiegoś powodu nie działałaby dla mnie. Musiałem dodać wiersz setup_postdata, aby działał.
}
Zakładam, że jeśli używasz tego poza pętlą, nie powinno to kolidować z innymi działającymi danymi setup_postdata.
Twoje zdrowie
źródło
Opierając się na odpowiedzi @ Maxime, czy to zadziała?
Wydaje mi się to dość proste, ale zastanawiam się, czy coś mi umknęło.
źródło
Jeśli WSZYSTKIE Twoje posty mają
<!--more-->
tag, możesz użyć następującego kodu z powyższym kodem:Oczywiście, jeśli masz jakieś posty, które nie mają tego
<!--more-->
tagu, zostaną one wyświetlone w całości. Działa w mojej sytuacji, ale nie dla wszystkich ...źródło
Widzę
get_the_excerpt()
jako funkcję ze starszym designem. W miarę wzrostu wykorzystania WordPress istnieje wiele nowszych przypadków użycia, w których nie pasuje, ale w których działają nowsze funkcje pobierania różnych danych. Jednym z przykładów jest obecnie częste stosowanie an$args
tablicy opcji funkcji.Ale łatwo to naprawić dla twoich potrzeb. Oto alternatywna funkcja, której możesz użyć, którą możesz umieścić w dowolnym miejscu
functions.php
pliku motywu :Wystarczy dodać do odpowiedzi MikeSchinkela, która z jakiegoś powodu nie działałaby dla mnie. Musiałem dodać wiersz setup_postdata, aby działał.
źródło
wp_reset_post_data()
działać wewnątrz pętli?To jest trochę dwuliniowy, którego używam dużo, wykorzystując wp_trim_words . Ciągle potrzebuję skrótu i czytam więcej funkcjonalności poza pętlą. Ktoś inny może uznać to za przydatne. Więc tego używam do:
Wstawiam to bezpośrednio do niestandardowego szablonu, który edytuję.
Awaria
1. Treść fragmentu
Uzyskaj fragment według identyfikatora postu, ale uzyskaj treść postu, jeśli żaden fragment nie został ustawiony.
Używam skróconej instrukcji If / Else PHP .
2. Długość słowa
Ustaw liczbę słów we fragmencie na 20
3. Wybierz ReadMore Content (link / tekst)
Kiedyś
$dapost->guid
dostawałem adres URL, ponieważ nie potrzebowałem przyjaznych adresów URL i chciałem uniknąć kolejnego połączenia z bazą danych. Zawsze możesz użyć get_the_permalink.Zobacz wp_trim_words w dokumentacji Wordpress.
źródło
To działało dla mnie:
źródło
Z WP 4.5.0 można użyć identyfikatora postu jako parametru
get_the_excerpt( $post->ID )
Źródło: https://developer.wordpress.org/reference/functions/get_the_excerpt/
źródło
Jest to szybsze:
źródło