Wydaje mi się, że tutaj brakuje mi czegoś oczywistego, ale wydaje mi się, że nie mogę zmusić WordPress do współpracy.
Generuję tagi OG na Facebooku z funkcją. Wszystko działa dobrze, z wyjątkiem fragmentu.
Czy od czasu wycofania get_the_excerpt($post->ID)
istnieje inny sposób na utworzenie fragmentu bez konieczności tworzenia zupełnie nowej pętli? Wydaje mi się to przesadne.
Moim pierwszym instynktem było użycie apply_filters()
:
$description = apply_filters('the_excerpt', get_post($post->ID)->post_content);
To daje mi pełny post wraz z treścią w formacie HTML. Okej, musi się mylić. Wypróbowałem więc kolejny logiczny pomysł:
$description = apply_filters('get_the_excerpt', get_post($post->ID)->post_content);
Nie ma kości. Teraz nie ma HTML, ale wciąż jest to pełny post (co jest bardzo mylące).
Jasne, nie ma problemu. Pomińmy wszystkie fantazyjne rzeczy i po prostu przejdźmy do przyciętego wpisu:
$description = wp_trim_excerpt(get_post($post->ID)->post_content);
Bez zmiany.
Więc moje pytanie brzmi: co się do cholery dzieje? Czy czegoś tu brakuje?
Wszedłem do rdzenia WP, aby dowiedzieć się, jak the_excerpt()
działa, i wygląda na to, że jest identyczny z moim wywołaniem:
/**
* Display the post excerpt.
*
* @since 0.71
* @uses apply_filters() Calls 'the_excerpt' hook on post excerpt.
*/
function the_excerpt() {
echo apply_filters('the_excerpt', get_the_excerpt());
}
Mam kilka pytań opartych na moich ustaleniach:
- Dlaczego filtr nie jest stosowany zgodnie z oczekiwaniami?
- Czy istnieje sposób na wyciągnięcie fragmentu poza pętlę bez tworzenia nowej pętli?
- Czy jestem szalony?
Z góry dziękuję za obejrzenie. Jestem dość zakłopotany.
get_the_excerpt()
nie jest przestarzałe, tylko dodatkowy parametr, który był do niego przekazywany, nie jest już używany.Odpowiedzi:
Okazuje się, że odpowiedź była
wp_trim_excerpt()
.Jest zdefiniowany w
wp-includes/functions.php:1879
:Tak więc żaden przekazany tekst nie jest przetwarzany; działa tylko wtedy, gdy jest wywoływany z pustym parametrem.
Aby rozwiązać ten problem, dodałem szybki filtr do mojego motywu, który rozwiązuje problem:
Jest nieco zbędny, ale podoba mi się to bardziej niż otwieranie nowych pętli za każdym razem, gdy chcę wygenerować fragment.
źródło
get_the_title($post->ID)
dostępne. Końcowa linia kodu było$description = wp_trim_excerpt(get_post($post->ID)->post_content);
$content = apply_filters( 'rw_trim_excerpt', $content );
i$content = rw_trim_excerpt($content);
, ale żaden z nich nie działał (pierwszy nie przyciął wyjścia, a później wystąpił błąd).get_the_excerpt
obchodzenia się naśladowaćthe_excerpt
, tak można nazwać:apply_filters('get_the_excerpt', $content);
.Próbować:
Zobacz:
get_post
Kodeks dla wszystkich dostępnych członków powrotu.źródło
get_the_excerpt()
nie naśladuje tego, sprawdź źródło, tylko uzyskuje dostęp do zmiennej członka,$post
której jestpost_excerpt
. Zobacz także link do kodu w odpowiedzi.the_excerpt
: „wyświetli automatyczny fragment, który odnosi się do pierwszych 55 słów treści postu”. Chcę naśladować to zachowanie poza pętlą.Możesz użyć mojej funkcji niestandardowej do usunięcia zawartości (pochodzi z frameworka NARGA )
Automatyczne przycinanie krótkiego kodu, kodu HTML, usuwanie [...], dodawanie tekstu „Czytaj więcej” (do przetłumaczenia)
źródło