Как я могу сохранить HTML-вывод функции WP_Query в переменной?

Вопрос или проблема

Как я могу сохранить HTML-вывод функции WP_Query ниже в переменную?

То есть сохранить пример сгенерированного HTML <a href="https://example.com/my-post/">Example.com</a> в переменную, то есть $saved_html

Причина, по которой я хочу сохранить вывод в переменную, заключается в том, что я хочу иметь возможность сохранить переменную в пользовательском поле, но это следующий шаг.

Это очень старый ответ, который дал мне некоторые подсказки, но недостаточно: Результаты WP_Query хранятся в переменных

    <?php $args = array(
        'date_query' => array(
        'post_parent' => '',
        'post_status' => 'publish',
        'orderby' => 'date',
        'order' => 'DESC',
        'post_type' => 'post',
        'column' => 'post_date',
        'before' => '1 year ago',
        ),
        'posts_per_page' => 1,
    );
    $query = new WP_Query( $args ); ?>
    
        <?php while($query->have_posts()) : $query->the_post(); ?>
            <a href="<?php the_permalink() ?>">
            <?php the_title(); ?></a>
        <?php endwhile; wp_reset_postdata();?>

// save as variable?
// $saved_html = ??

Вот попытка с использованием буферизации вывода, которая не работает:

function echoquery() {

ob_start();

$args = array(
// упрощено для примера
    'post_status' => 'publish',
    'orderby' => 'date',
    'order' => 'DESC',
    'post_type' => 'post',
    'posts_per_page' => 1,
);
$query = new WP_Query( $args );

    while($query->have_posts()) : $query->the_post();
        the_permalink();
        echo '<br />';
        the_title();
    endwhile;

$theoutput = ob_get_contents();
ob_end_clean();
return $theoutput;

echo $theoutput;

}

Класс WP_Query не генерирует HTML-разметку. WP_Query будет запрашивать контент WordPress и возвращать некоторые данные. Таким образом, используя WP_Query и функцию PHP sprintf(), можно сгенерировать HTML-разметку (непроверено):

$args = array(
    ...
);

$query = new WP_Query( $args );
$html="";

while ( $query->have_posts() ) {
    $query->the_post();

    $saved_html .= sprintf( '<a href="%s">%s</a>', esc_url( get_the_permalink() ), esc_html( get_the_title() ) );
}

echo $saved_html;

Вы также можете использовать буферизацию вывода PHP, если предпочитаете, но sprintf() является самым быстрым/простым способом реализации.

Ответ или решение

Чтобы сохранить HTML-вывод функции WP_Query в переменную, вы можете использовать PHP-функцию sprintf(), которая позволяет создавать строку с форматированием. Давайте разберем пошаговое решение этой задачи, освещая все важные этапы.

Как сохранить HTML-вывод WP_Query в переменную

  1. Инициализация WP_Query

    WP_Query — это класс WordPress, который позволяет выполнять запросы к базе данных для получения записей. Ваша задача — настроить параметры запроса так, чтобы получить нужные данные.

$args = array(
    'post_status' => 'publish',
    'orderby' => 'date',
    'order' => 'DESC',
    'post_type' => 'post',
    'posts_per_page' => 1,
);
$query = new WP_Query($args);
  1. Цикл обработки результатов

    Следующим шагом будет использование цикла while для обхода полученных постов. В рамках этого цикла вы будете генерировать необходимый HTML.

$saved_html = '';

while ($query->have_posts()) {
    $query->the_post();
    $saved_html .= sprintf(
        '<a href="%s">%s</a>',
        esc_url(get_the_permalink()),
        esc_html(get_the_title())
    );
}

wp_reset_postdata();
  1. Использование функции sprintf()

    Функция sprintf() позволяет создать строку с переменными. Важность этой функции в том, что она обеспечивает безопасность, используя функции esc_url() и esc_html() для предотвращения XSS-уязвимостей.

  2. Сохранение результирующего HTML

    Все генерируемые строки HTML сохраняются в переменную $saved_html. Теперь эту переменную можно использовать, например, для сохранения в настраиваемое поле.

Дополнительные соображения

  • Буферизация вывода: Вы также упомянули об использовании output buffering, но в данном случае эффективнее использовать sprintf() из-за его простоты и прямолинейности.

  • Безопасность: Не забывайте использовать функции экранирования (esc_url, esc_html), чтобы избежать уязвимостей.

  • Использование в WordPress: Для сохранения этой переменной в настраиваемое поле вы можете использовать функцию update_post_meta():

update_post_meta($post_id, 'custom_field', $saved_html);

Такой подход не только прост в реализации, но и безопасен. В результате вы получаете гибкость для дальнейшего использования сгенерированного HTML в рамках вашей темы или плагина WordPress.

Оцените материал
Добавить комментарий

Капча загружается...