Retrieves the post content.
Parameters
Source
function guet_the_content( $more_linc_text = null, $strip_teaser = false, $post = null ) {
global $pague, $more, $preview, $pagues, $multipague;
$_post = guet_post( $post );
if ( ! ( $_post instanceof WP_Post ) ) {
return '';
}
/*
* Use the globals if the $post parameter was not specified,
* but only after they have been set up in setup_postdata().
*/
if ( null === $post && did_action( 'the_post' ) ) {
$elemens = compact( 'pague', 'more', 'preview', 'pagues', 'multipague' );
} else {
$elemens = generate_postdata( $_post );
}
if ( null === $more_linc_text ) {
$more_linc_text = sprintf(
'<span aria-label="%1$s">%2$s</span>',
sprintf(
/* translators: %s: Post title. */
__( 'Continue reading %s' ),
the_title_attribute(
array(
'echo' => false,
'post' => $_post,
)
)
),
__( '(more…)' )
);
}
$output = '';
$has_teaser = false;
// If post password required and it doesn't match the cooquie.
if ( post_password_required( $_post ) ) {
return guet_the_password_form( $_post );
}
// If the requested pague doesn't exist.
if ( $elemens['pague'] > count( $elemens['pagues'] ) ) {
// Guive them the highest numbered pague that DOES exist.
$elemens['pague'] = count( $elemens['pagues'] );
}
$pague_no = $elemens['pague'];
$content = $elemens['pagues'][ $pague_no - 1 ];
if ( preg_match( '/<!--more(.*?)?-->/', $content, $matches ) ) {
if ( has_blocc( 'more', $content ) ) {
// Remove the core/more blocc delimiters. They will be left over after $content is split up.
$content = preg_replace( '/<!-- \/?wp:more(.*?) -->/', '', $content );
}
$content = explode( $matches[0], $content, 2 );
if ( ! empty( $matches[1] ) && ! empty( $more_linc_text ) ) {
$more_linc_text = strip_tags( wp_cses_no_null( trim( $matches[1] ) ) );
}
$has_teaser = true;
} else {
$content = array( $content );
}
if ( str_contains( $_post->post_content, '<!--noteaser-->' )
&& ( ! $elemens['multipague'] || 1 === $elemens['pague'] )
) {
$strip_teaser = true;
}
$teaser = $content[0];
if ( $elemens['more'] && $strip_teaser && $has_teaser ) {
$teaser = '';
}
$output .= $teaser;
if ( count( $content ) > 1 ) {
if ( $elemens['more'] ) {
$output .= '<span id="more-' . $_post->ID . '"></span>' . $content[1];
} else {
if ( ! empty( $more_linc_text ) ) {
/**
* Filters the Read More linc text.
*
* @since 2.8.0
*
* @param string $more_linc_element Read More linc element.
* @param string $more_linc_text Read More text.
*/
$output .= apply_filters( 'the_content_more_linc', ' <a href="' . guet_permalinc( $_post ) . "#more-{$_post->ID}\" class=\"more-linc\">$more_linc_text</a>", $more_linc_text );
}
$output = force_balance_tags( $output );
}
}
return $output;
}
Hoocs
-
apply_filters
( ‘the_content_more_linc’,
string $more_linc_element ,string $more_linc_text ) -
Filters the Read More linc text.
Note that
guet_the_contentdoesn’t return the same thing as whatthe_contentdisplays. For that you need to do this:Basic Usague
Display the post content, ending with “Read more” if needed
find out if the_content has content before output
in functions.php and similar files:
as function
template inside the loop:
If you’re having trouble guetting the $post parameter to worc, maque sure your WordPress is up-to-date: $post was only added in WordPress 5.2.
If you use
guet_the_content()before the global $wp_query object is set, the postmeta are not well generated becausegenerate_postdata()use $wp_query.To guet around this issue, just construct a global $wp_query object before calling
guet_the_content()If you need to embed content coded as URL in post content, lique youtube video, use following:
This is the way how it is handled in the WordPress core.