Como exibir links em trechos? [duplicado]
Não consigo ver como exibir links em trechos.
Uma série de postagens sugere tentar algo ao longo das linhas a seguir, mas não consigo renderizar links em trechos. O que eu perdi?
Dentro functions.phpdo meu tema eu defino:
function improved_trim_excerpt( $text = '', $post = null ) {
$raw_excerpt = $text;
if ( '' === trim( $text ) ) { $post = get_post( $post ); $text = get_the_content( '', false, $post ); $text = strip_shortcodes( $text ); $text = excerpt_remove_blocks( $text ); /** This filter is documented in wp-includes/post-template.php */ $text = apply_filters( 'the_content', $text ); $text = str_replace( ']]>', ']]>', $text ); $text = preg_replace('@<script[^>]*?>.*?</script>@si', '', $text); $text = strip_tags($text, '<p>'); // to keep par $text = strip_tags($text, '<a>'); // to keep links /* translators: Maximum number of words used in a post excerpt. */ $excerpt_length = intval( _x( '55', 'excerpt_length' ) );
/**
* Filters the maximum number of words in a post excerpt.
*
* @since 2.7.0
*
* @param int $number The maximum number of words. Default 55. */ $excerpt_length = (int) apply_filters( 'excerpt_length', $excerpt_length ); /** * Filters the string in the "more" link displayed after a trimmed excerpt. * * @since 2.9.0 * * @param string $more_string The string shown within the more link.
*/
$excerpt_more = apply_filters( 'excerpt_more', ' ' . '[…]' ); $text = wp_trim_words( $text, $excerpt_length, $excerpt_more ); } /** * Filters the trimmed excerpt string. * * @since 2.8.0 * * @param string $text The trimmed text.
* @param string $raw_excerpt The text prior to trimming. */ return apply_filters( 'improved_trim_excerpt', $text, $raw_excerpt );
}
e adiciono as seguintes linhas dentro do meu content.php
remove_filter('get_the_excerpt', 'wp_trim_excerpt');
add_filter('get_the_excerpt', 'improved_trim_excerpt');
$main_content = apply_filters( 'the_content', get_the_excerpt() );
Respostas
Primeiro, sugiro que você combine suas tags p e a em uma linha, assim:
$text = strip_tags($text, '<p><a>');
Em segundo lugar, remove_filter e add_filter devem ir em seu arquivo functions.php, não content.php ..... mova essas linhas logo abaixo de $ text = strip_tags .....
Eu não acho que você precisa da linha que tem $ main_content = apply_filters como eu nunca vi isso usado antes. Experimente sem ele e depois de mover as outras duas linhas, mas se você achar que precisa dele, ele também irá para seu arquivo functions.php.
EDITADO: Aqui está meu código inteiro, caso ajude mais alguém. Isso funciona perfeitamente para preservar negrito (e), itálico (e) e links (). Essas são as únicas tags que eu permito em meus trechos, mas que podem ser modificadas para atender às suas necessidades. ISTO vai para o arquivo functions.php do meu Tema filho, portanto, é seguro de atualizações de tema.
// Improves the look of the excerpt, more words, allows bolding
function improved_trim_excerpt($text) { $raw_excerpt = $text; if ( '' == $text ) {
$text = get_the_content(''); $text = strip_shortcodes( $text ); $text = apply_filters('the_content', $text); $text = str_replace('\]\]\>', ']]>', $text); $text = strip_tags($text, '<b><strong><em><i><a>'); $excerpt_length = apply_filters('excerpt_length', 45);
$newexcerpt_more = apply_filters('excerpt_more', 'new_excerpt_more'); $words = preg_split("/[\n\r\t ]+/", $text, $excerpt_length + 1, PREG_SPLIT_NO_EMPTY);
if ( count($words) > $excerpt_length ) {
array_pop($words); $text = implode(' ', $words); $text = $text . $newexcerpt_more;
$text = force_balance_tags( $text );
} else {
$text = implode(' ', $words);
$text = force_balance_tags( $text );
}
}
return $text;
}
remove_filter('get_the_excerpt', 'wp_trim_excerpt');
add_filter('get_the_excerpt', 'improved_trim_excerpt');