Получение содержимого поста с функцией get_the_content()

Получение Контента Поста с помощью get_the_content()

Функция get_the_content() используется для получения содержимого текущего поста. Однако, для корректного использования эта функция должна применяться внутри цикла WordPress (loop). Важно отметить, что get_the_content() не обрабатывает контент так, как это делает функция the_content(). Если вам нужно применить все фильтры, как в the_content(), используйте следующую конструкцию:

apply_filters( 'the_content', get_the_content() );

Использование

Чтобы получить содержание поста, вы можете использовать следующий код:

$content = get_the_content( $more_link_text, $strip_teaser );

Аргументы функции

  • $more_link_text (string): Текст для ссылки "Читать подробнее". Эта ссылка добавляется, если в содержимом поста присутствует HTML-комментарий <!--more--> и если функция применяется на любой архивной странице (не на единственной странице поста). По умолчанию: null.

  • $strip_teaser (true/false): Убирать ли контент перед тегом <!--more-->, когда сне содержимое показывается на единственной странице. Слово "teaser" (тизер) означает привлекательный текст перед тегом <!--more-->. По умолчанию этот параметр отключен. Вы также можете включить его, указав в любом месте контента поста HTML-комментарий <!--noteaser-->. По умолчанию: false.

  • $post (WP_Post/object/int): Пост, содержание которого нужно получить. По умолчанию: null. Начиная с версии 5.2.

Примеры

Пример 1: Получение содержимого поста в переменную

$content = apply_filters( 'the_content', get_the_content() );
echo $content;

Обратите внимание, что результат этой функции не будет таким же, как результат the_content(). Чтобы отобразить одинаковый контент, необходимо использовать фильтр.

Пример 2: Отображение содержимого поста с окончанием "Читать далее", если нужно

$content = get_the_content( 'Читать далее' );
echo apply_filters( 'the_content', $content );

Пример 3: Отображение содержимого поста только если оно не пустое

$the_content = apply_filters( 'the_content', get_the_content() );
if ( ! empty( $the_content ) ) {
    echo $the_content;
}

Для отдельного поста с ID 12:

$post = get_post( 12 ); // определенный пост
$the_content = apply_filters( 'the_content', $post->post_content );
if ( ! empty( $the_content ) ) {
    echo $the_content;
}

Примечания

  • $page (глобальная переменная): Номер страницы единственного поста/страницы.
  • $more (глобальная переменная): Логический индикатор того, просматривается ли единственный пост/страница.
  • $preview (глобальная переменная): Необходимость предпросмотра поста/страницы.
  • $pages (глобальная переменная): Массив всех страниц в посте/странице. Каждый элемент массива содержит часть контента, разделенную тегом <!--nextpage-->.
  • $multipage (глобальная переменная): Логический индикатор того, присутствует ли несколько страниц в контенте.

Изменения в функциях

  • С версии 0.71 функция была введена.
  • С версии 5.2.0 добавлен параметр $post.

Код Функции

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 && did_action( 'the_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(
                __( 'Продолжить чтение %s' ),
                the_title_attribute(
                    array(
                        'echo' => false,
                        'post' => $_post,
                    )
                )
            ),
            __( '(ещё…)' )
        );
    }

    $output     = '';
    $has_teaser = false;

    if ( post_password_required( $_post ) ) {
        return get_the_password_form( $_post );
    }

    if ( $elements['page'] > count( $elements['pages'] ) ) {
        $elements['page'] = count( $elements['pages'] );
    }

    $page_no = $elements['page'];
    $content = $elements['pages'][ $page_no - 1 ];
    if ( preg_match( '/<!--more(.*?)?-->/', $content, $matches ) ) {
        if ( has_block( 'more', $content ) ) {
            $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 ( str_contains( $_post->post_content, '<!--noteaser-->' )
        && ( ! $elements['multipage'] || 1 === $elements['page'] )
    ) {
        $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 ) ) {
                $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 );
        }
    }

    return $output;
}

Связанные Функции

  • get_the_author()
  • get_the_excerpt()
  • the_content()
  • get_post()

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *