Штрих-код с удлинением шлейфа на двух страницах

Приведенный ниже код предназначен для простого прокрутки сообщений, предоставления им возможности добавления html-форматирования, а затем возврата их в позицию короткого кода. У меня есть условная логика, которая определяет форматирование на основе принятого в «категории» (термин). Мне нужно вывести его дважды на одной странице, но я вижу только код, который я добавил за пределами цикла.

add_shortcode('my_shortcode','generate_my_shortcode_content'); function generate_my_shortcode_content($atts){ $a = shortcode_atts( array( 'post-count' => 3, 'category' => 'default-cat' ), $atts ); $post_count = (int)$a['post-count']; $post_category = explode(',', $a['category']); $args = array( 'post_type' => 'my-type', 'posts_per_page' => $post_count, 'tax_query' => array( array( 'taxonomy' => 'my-taxonomy', 'field' => 'slug', 'terms' => $post_category ) ) ); $test = "<h1>"; $query = new WP_Query( $args ); if($query->have_posts()):while($query->have_posts()):$query->the_post(); $post_id = get_the_ID(); $post_title = get_the_title($post_id); $post_content = get_the_content($post_id); $posts .= $post_id . $post_title . $post_content; $test .= "this is a test"; endwhile;wp_reset_postdata();endif; $test .= "</h1>"; return $posts . $test; } 

Эта функция вернет {Post ID}{Post Title}{Post Content}<h1>this is a test</h1> при первом выполнении, но будет возвращать только <h1></h1> во второй. Почему это?

Solutions Collecting From Web of "Штрих-код с удлинением шлейфа на двух страницах"

Не уверен, что я понимаю, что вы делаете со своим коротким кодом, но я думаю, вам нужно запустить rewind_posts (), чтобы переместить счетчик циклов обратно в начало для второго «выполнения». Пример здесь: https://codex.wordpress.org/Function_Reference/rewind_posts

дальнейшее объяснение здесь: https://stackoverflow.com/questions/23729847/wordpress-difference-between-rewind-posts-wp-reset-postdata-and-wp-reset-q

Попытайтесь не возиться с глобальным $post WP_Query не нужно вызывать the_post() чтобы перебирать сообщения.

 $query = new WP_Query( $args ); if( $query->have_posts() ): foreach( $query->posts as $post ): $post_id = $post->ID $post_title = get_the_title($post_id); $post_content = get_the_content($post_id); $posts .= $post_id . $post_title . $post_content; $test .= "this is a test"; endforeach; endif;