Intereting Posts

поместить данные wp_query в таблицу html

Мне нужно было отобразить некоторые данные в простой таблице html, поэтому я начал с самых оснований таблицы. Как показано в коде, необходимыми данными был список значений настраиваемого поля для meta_key submitdate , из всех сообщений, под определенным тегом «женщина» . Я написал следующий код, и все работает отлично до первого WP_Query .

UPDATE: текущий код, предложенный @islam.

 <table border="1"> <thead> <tr> <th>NO.</th> <th>FEMALE DATA</th> <th>MALE DATA</th> </tr> </thead> <tbody> <?php $fmargs = array ( 'tag' => 'female', 'posts_per_page' => -1 ); $female_query = new WP_Query( $fmargs ); while ( $female_query -> have_posts() ): $female_query -> the_post(); ?> <tr> <td></td> <td> <?php echo get_post_meta($post->ID, 'submitdate', true); ?> </td> <?php endwhile; wp_reset_postdata(); //reset the first query ?> <?php $margs = array ( 'tag' => 'male', 'posts_per_page' => -1 ); $male_query = new WP_Query( $margs ); while ( $male_query -> have_posts() ): $male_query -> the_post(); ?> <td> <?php echo get_post_meta($post->ID, 'submitdate', true);?> </td> </tr> <?php endwhile; wp_reset_postdata(); //reset the second query ?> </tbody> </table> 

Теперь мне понадобился список данных, заполненных аналогичным образом во второй столбец в той же таблице для другого тега «мужчина». Когда я попробовал второй аналогичный WP_Query , он возвращает данные, но он либо заполняется в неправильную строку, либо одну ячейку или полностью выходит из таблицы. поскольку я пробовал бесконечные многообразия <tr> and <td> . Таким образом, я не могу получить данные, перечисленные во втором столбце, точно так же, как и первый столбец.

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

Solutions Collecting From Web of "поместить данные wp_query в таблицу html"

Вот что происходит с вашим кодом:

  1. query_posts использует global переменную wp_query . Он всегда перезаписывает эту переменную, поэтому вы не должны использовать query_posts почти всегда.
  2. Ваши первые query_posts захватывают исходные данные $wp_query .
  3. Вы начинаете цикл
  4. Первое, что вы делаете в этом цикле, сбрасывает $wp_query в исходный запрос. Теперь global $wp_query имеет разные данные, которые были у него при запуске цикла.
  5. Затем вы снова clobber $wp_query
  6. И запустите новый цикл
  7. А затем снова сбросьте запрос.

Другими словами, ваши данные перезаписываются и не синхронизируются несколькими способами. Исправление состоит в том, чтобы не использовать query_posts . WP_Query этого используйте новый объект WP_Query .

  $outer = new WP_Query( array ( 'tag' => 'female', 'posts_per_page' => -1 ) ); if ($outer->have_posts()) { while ( $outer->have_posts() ) { $outer->the_post(); // ... 

Остальная часть вашей проблемы – это действительно PHP / HTML, но вот грубая схема. То, что вам нужно сделать, это перебрать оба массива сразу.

 $args = array ( 'post_type' => 'post', 'posts_per_page' => -1 ); $female_query = new WP_Query( $args ); $args = array ( 'post_type' => 'page', 'posts_per_page' => -1 ); $male_query = new WP_Query( $args ); $count = max($female_query->found_posts,$male_query->found_posts); var_dump($count); echo '<table>'; for ($i = 0; $i < $count; $i++) { echo '<tr>'; echo '<td>'; echo $i; echo '<td>'; echo '<td>'; if (isset($female_query->posts[$i])) { echo $female_query->posts[$i]->post_title; } echo '<td>'; echo '<td>'; if (isset($male_query->posts[$i])) { echo $male_query->posts[$i]->post_title; } echo '<td>'; echo '</tr>'; } echo '</table>'; 

$post не задано в моем коде. Это нестандартный цикл, потому что вам нужны данные из двух запросов одновременно. Чтобы получить метаданные, используйте $female_query->posts[$i]->ID вместо $post->ID или передайте его через setup_postdatasetup_postdata($female_query->posts[$i]) – хотя это возможно излишним для этого обстоятельства.

Прежде всего НЕ используйте query_posts() , он изменит ваш исходный цикл; вместо этого используйте WP_Query() ( почему? ). И вы можете назвать их по мере необходимости ( см. Здесь ).

 <?php //Female Query ?> <?php $fmargs = array ( 'tag' => 'female', 'posts_per_page' => -1 ); $female_query = new WP_Query( $fmargs ); while ( $female_query -> have_posts() ): $female_query -> the_post(); echo get_post_meta($post->ID, 'submitdate', true); endwhile; wp_reset_postdata(); //reset the first query ?> 

А также

 <?php //Male Query ?> <?php $margs = array ( 'tag' => 'male', 'posts_per_page' => -1 ); $male_query = new WP_Query( $margs ); while ( $male_query -> have_posts() ): $male_query -> the_post(); echo get_post_meta($post->ID, 'submitdate', true); endwhile; wp_reset_postdata(); //reset the second query ?>