Как сохранить сообщения для переходных? - PullRequest
2 голосов
/ 25 апреля 2020

Мой код:

if (!empty($packs = get_post_meta(get_the_ID(), 'pack', true))):
    if ( false === ( $q = get_transient( 'packs_list' ) ) ) {
        $params = array(
            'post_type' => 'product',
            'posts_per_page' => '7',

            'meta_query' => array(
                array(
                    'key' => 'package_pack',
                    'value' => $packs,
                    'compare' => 'IN'
                )
            )
        );

        $wp_query = new WP_Query($params);

        echo '<div class="products list_">';
            while ($wp_query->have_posts()) : $wp_query->the_post();
                $q = include(rh_locate_template('inc/parts/main.php'));
            endwhile;  

        echo '</div>';

        set_transient( 'packs_list', $q, 1 * HOUR_IN_SECONDS ); 
        wp_reset_postdata();    

    }
endif;

Я пытаюсь сохранить весь сгенерированный список сообщений для переходного процесса как html, но не работает. Как я могу сохранить html вывод из этого l oop в переходный процесс?

1 Ответ

1 голос
/ 25 апреля 2020

Хотя я не уверен, что входит в ваш список, первая проблема, с которой вы столкнулись, заключается в том, что вы не можете отобразить вывод своей строки, которую хотите сохранить в качестве переходного процесса. Вы должны объединить $q в длинную строку со всеми включенными выходными данными HTML.

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

if (!empty($packs = get_post_meta(get_the_ID(), 'pack', true))):
    if ( false === ( $q = get_transient( 'packs_list' ) ) ) {
        $params = array(
            'post_type' => 'product',
            'posts_per_page' => '7',

            'meta_query' => array(
                array(
                    'key' => 'package_pack',
                    'value' => $packs,
                    'compare' => 'IN'
                )
            )
        );

        $wp_query = new WP_Query($params);

        $q = '<div class="products list_">';
            while ($wp_query->have_posts()) : $wp_query->the_post();
                ob_start();
                include(rh_locate_template('inc/parts/main.php'));
                $q .= ob_get_clean();
            endwhile;  

        $q .= '</div>';

        set_transient( 'packs_list', $q, 1 * HOUR_IN_SECONDS ); 
        wp_reset_postdata();    

    }
endif;

Если вам все еще нужно вывести $q на экран в этом процессе, вы можете просто

echo $q;

Где вам нужно.

...