Sinto que devo estar perdendo algo bastante óbvio aqui, mas não consigo fazer o WordPress cooperar.
Estou gerando tags OG do Facebook com uma função. Tudo funciona bem, exceto o trecho.
Desde a depreciação de get_the_excerpt($post->ID)
, existe outra maneira de criar um trecho sem ter que criar um loop totalmente novo? Parece excessivo para mim.
Meu primeiro instinto foi usar apply_filters()
:
$description = apply_filters('the_excerpt', get_post($post->ID)->post_content);
Isso me dá a postagem completa, completa com conteúdo formatado em HTML. Ok, deve estar errado. Então, tentei a próxima idéia lógica:
$description = apply_filters('get_the_excerpt', get_post($post->ID)->post_content);
Sem dados. Agora não há HTML, mas ainda é o post completo (o que é realmente confuso).
Ok sem problemas. Vamos pular todas as coisas chiques e apenas ir para a entrada aparada:
$description = wp_trim_excerpt(get_post($post->ID)->post_content);
Nenhuma mudança.
Então, minha pergunta é a seguinte: o que diabos está acontecendo? Está faltando algo aqui?
Entrei no núcleo do WP para descobrir como the_excerpt()
funciona e parece idêntico à minha chamada:
/**
* 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());
}
Tenho algumas perguntas com base em minhas descobertas:
- Por que o filtro não está sendo aplicado conforme o esperado?
- Existe uma maneira de obter o trecho fora do loop sem criar um novo loop?
- Eu sou louco?
Agradecemos antecipadamente por dar uma olhada. Estou bastante perplexo, aqui.
get_the_excerpt()
não é preterido, apenas os parâmetros extras que costumavam ser passados para ele não são mais usados.Respostas:
Acontece que a resposta estava em
wp_trim_excerpt()
.Está definido em
wp-includes/functions.php:1879
:Portanto, qualquer texto passado não é processado; só funciona se for chamado com um parâmetro vazio.
Para resolver isso, adicionei um filtro rápido ao meu tema que resolve o problema:
É um pouco redundante, mas eu gosto mais do que abrir novos loops toda vez que quero gerar um trecho.
fonte
get_the_title($post->ID)
disponíveis. A linha final do código era$description = wp_trim_excerpt(get_post($post->ID)->post_content);
$content = apply_filters( 'rw_trim_excerpt', $content );
e$content = rw_trim_excerpt($content);
, mas nenhum deles funcionou (o antigo não cortou a saída e o posterior produziu um erro).get_the_excerpt
manuseio para imitarthe_excerpt
, para que você pode ligar no:apply_filters('get_the_excerpt', $content);
.Tentar:
Consulte:
get_post
Codex para todos os membros de retorno disponíveis.fonte
get_the_excerpt()
não imita isso, verifique a fonte, está acessando apenas a variável membro da$post
qual épost_excerpt
. Veja também o link do codex na resposta.the_excerpt
: "ele exibirá um trecho automático que se refere às 55 primeiras palavras do conteúdo da publicação". Eu estou olhando para imitar esse comportamento fora do circuito.Você pode usar minha função personalizada para arquivar o conteúdo (é do NARGA Framework )
Auto-atalho de recorte automático, código HTML, remova, [...] adicione texto "Leia mais" (traduzível)
fonte