WordPress Version: 2.2
/**
* Retrieve the post content.
*
* @since 0.71
* @since 5.2.0 Added the `$post` parameter.
*
* @global int $page Page number of a single post/page.
* @global int $more Boolean indicator for whether single post/page is being viewed.
* @global bool $preview Whether post/page is in preview mode.
* @global array $pages Array of all pages in post/page. Each array element contains
* part of the content separated by the `<!--nextpage-->` tag.
* @global int $multipage Boolean indicator for whether multiple pages are in play.
*
* @param string $more_link_text Optional. Content for when there is more text.
* @param bool $strip_teaser Optional. Strip teaser content before the more text. Default is false.
* @param WP_Post|object|int $post Optional. WP_Post instance or Post ID/object. Default is null.
* @return string
*/
function get_the_content($more_link_text = null, $strip_teaser = false, $post = null)
{
global $page, $more, $preview, $pages, $multipage;
$_post = get_post($post);
if (!$_post instanceof WP_Post) {
return '';
}
if (null === $post) {
$elements = compact('page', 'more', 'preview', 'pages', 'multipage');
} else {
$elements = generate_postdata($_post);
}
if (null === $more_link_text) {
$more_link_text = sprintf('<span aria-label="%1$s">%2$s</span>', sprintf(
/* translators: %s: Name of current post */
__('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 cookie.
if (post_password_required($_post)) {
return get_the_password_form($_post);
}
if ($elements['page'] > count($elements['pages'])) {
// if the requested page doesn't exist
$elements['page'] = count($elements['pages']);
// give them the highest numbered page that DOES exist
}
$page_no = $elements['page'];
$content = $elements['pages'][$page_no - 1];
if (preg_match('/<!--more(.*?)?-->/', $content, $matches)) {
if (has_block('more', $content)) {
// Remove the core/more block 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_link_text)) {
$more_link_text = strip_tags(wp_kses_no_null(trim($matches[1])));
}
$has_teaser = true;
} else {
$content = array($content);
}
if (false !== strpos($_post->post_content, '<!--noteaser-->') && (!$elements['multipage'] || $elements['page'] == 1)) {
$strip_teaser = true;
}
$teaser = $content[0];
if ($elements['more'] && $strip_teaser && $has_teaser) {
$teaser = '';
}
$output .= $teaser;
if (count($content) > 1) {
if ($elements['more']) {
$output .= '<span id="more-' . $_post->ID . '"></span>' . $content[1];
} else {
if (!empty($more_link_text)) {
/**
* Filters the Read More link text.
*
* @since 2.8.0
*
* @param string $more_link_element Read More link element.
* @param string $more_link_text Read More text.
*/
$output .= apply_filters('the_content_more_link', ' <a href="' . get_permalink($_post) . "#more-{$_post->ID}\" class=\"more-link\">{$more_link_text}</a>", $more_link_text);
}
$output = force_balance_tags($output);
}
}
if ($preview) {
// Preview fix for JavaScript bug with foreign languages.
$output = preg_replace_callback('/\%u([0-9A-F]{4})/', '_convert_urlencoded_to_entities', $output);
}
return $output;
}