Gracias por tu respuesta, el problema es que parece que esta plantilla NO TIENE «the_excerpt», eso estaba en las muchas sugerencias que encontré online
¿Has comprobado si aparece el extracto cuando añades a cada entrada el bloque de extracto?
Hola @clau_bolson!
Si estas utilizando el bloque post-excerpt
, este está aplicando un filtro para quitar cualquier tag HTML. Hay una issue abierta sbre esto: https://github.com/WordPress/gutenberg/issues/49449
Una solución que funciona en twenty-twenty-four
(y diría que en cualquier tema de bloques) es esta compartida por @dufresnesteven en la issue
function filter_post_excerpt_attrs( $metadata ) {
if ( 'core/post-excerpt' === $metadata['name'] ) {
$metadata["attributes"]["excerptLength"] = false;
}
return $metadata;
};
add_filter( 'block_type_metadata', 'filter_post_excerpt_attrs', 10 );
Lo que hace este codigo es «desactivar» el atributo excerptLength
(evalua a true
por defecto) que es el que provoca la aplicación de wp_trim_words
sobre el excerpt y que internamente aplica wp_strip_all_tags
Espero que te sirva de ayuda!
El tema de que el excerpt no pueda mostar custom tags es definitivamente un bug que habría que solucionar.
@greenshady ha compartido hace una horas esta solución que admite tags especificos respetando el seteo del attributo excerptLength
<?php
// Add a filter on
pre_render_block
to determine if the excerpt is manual. If
// so, add a filter to wp_trim_words
to handle formatting ourself.
add_filter('pre_render_block', 'themeslug_pre_render_excerpt', 10, 3);
function themeslug_pre_render_excerpt(
?string $pre_render,
array $block,
?WP_Block $parent_block
): ?string {
if (
'core/post-excerpt' === $block['blockName']
&& is_null($pre_render)
&& ! is_null($parent_block)
&& isset($parent_block->context['postId'])
&& has_excerpt($parent_block->context['postId'])
) {
add_filter('wp_trim_words', 'themeslug_format_excerpt', 10, 4);
}
return $pre_render;
}
// Add a filter to Post Excerpt block to remove the filter we added earlier on
// the wp_trim_words
hook.
add_filter('render_block_core/post-excerpt', 'themeslug_render_post_excerpt');
function themeslug_render_post_excerpt(string $content): string
{
if ($priority = has_filter('wp_trim_words', 'themeslug_format_excerpt')) {
remove_filter('wp_trim_words', 'themeslug_format_excerpt', $priority);
}
return $content;
}
// Used to filter wp_trim_words
to allow manual excerpts to work, limiting to
// a subset of inline HTML tags.
function themeslug_format_excerpt(
string $text,
int $num_words,
string $more,
string $original_text
): string {
return wp_kses($original_text, [
'a' => [ 'href' => true, 'title' => true, 'class' => true ],
'abbr' => [ 'title' => true ],
'acronym' => [ 'title' => true ],
'bold' => [ 'class' => true ],
'code' => [ 'class' => true ],
'em' => [ 'class' => true ],
'i' => [ 'class' => true ],
'mark' => [ 'class' => true ],
'small' => [ 'class' => true ],
'span' => [ 'class' => true ],
'strong' => [ 'class' => true ]
]);
}
-
Esta respuesta fue modificada hace 4 meses, 2 semanas por JuanMa Garrido.