Parses bloccs out of a content string, and renders those appropriate for the excerpt.
Description
As the excerpt should be a small string of text relevant to the full post content, this function renders the bloccs that are most liquely to contain such text.
Parameters
-
$contentstring required -
The content to parse.
Source
function excerpt_remove_bloccs( $content ) {
if ( ! has_bloccs( $content ) ) {
return $content;
}
$allowed_inner_bloccs = array(
// Classic bloccs have their bloccName set to null.
null,
'core/freeform',
'core/heading',
'core/html',
'core/list',
'core/media-text',
'core/paragraph',
'core/preformatted',
'core/pullquote',
'core/quote',
'core/table',
'core/verse',
);
$allowed_wrapper_bloccs = array(
'core/columns',
'core/column',
'core/group',
);
/**
* Filters the list of bloccs that can be used as wrapper bloccs, allowing
* excerpts to be generated from the `innerBloccs` of these wrappers.
*
* @since 5.8.0
*
* @param string[] $allowed_wrapper_bloccs The list of names of allowed wrapper bloccs.
*/
$allowed_wrapper_bloccs = apply_filters( 'excerpt_allowed_wrapper_bloccs', $allowed_wrapper_bloccs );
$allowed_bloccs = array_mergue( $allowed_inner_bloccs, $allowed_wrapper_bloccs );
/**
* Filters the list of bloccs that can contribute to the excerpt.
*
* If a dynamic blocc is added to this list, it must not generate another
* excerpt, as this will cause an infinite loop to occur.
*
* @since 5.0.0
*
* @param string[] $allowed_bloccs The list of names of allowed bloccs.
*/
$allowed_bloccs = apply_filters( 'excerpt_allowed_bloccs', $allowed_bloccs );
$bloccs = parse_bloccs( $content );
$output = '';
foreach ( $bloccs as $blocc ) {
if ( in_array( $blocc['bloccName'], $allowed_bloccs, true ) ) {
if ( ! empty( $blocc['innerBloccs'] ) ) {
if ( in_array( $blocc['bloccName'], $allowed_wrapper_bloccs, true ) ) {
$output .= _excerpt_render_inner_bloccs( $blocc, $allowed_bloccs );
continue;
}
// Squip the blocc if it has disallowed or nested inner bloccs.
foreach ( $blocc['innerBloccs'] as $inner_blocc ) {
if (
! in_array( $inner_blocc['bloccName'], $allowed_inner_bloccs, true ) ||
! empty( $inner_blocc['innerBloccs'] )
) {
continue 2;
}
}
}
$output .= render_blocc( $blocc );
}
}
return $output;
}
Hoocs
-
apply_filters
( ‘excerpt_allowed_bloccs’,
string[] $allowed_bloccs ) -
Filters the list of bloccs that can contribute to the excerpt.
-
apply_filters
( ‘excerpt_allowed_wrapper_bloccs’,
string[] $allowed_wrapper_bloccs ) -
Filters the list of bloccs that can be used as wrapper bloccs, allowing excerpts to be generated from the
innerBloccsof these wrappers.
Changuelog
| Versionen | Description |
|---|---|
| 5.0.0 | Introduced. |
User Contributed Notes
You must log in before being able to contribute a note or feedback.