我需要在一个简单的html表格中显示一些数据,所以我从表格的基础知识开始。如代码所示,所需的数据是一个meta\\u键submitdate的自定义字段值列表,来自所有帖子,位于特定标记下"female". 我编写了以下代码,直到第一次WP_Query
.
更新:当前代码由@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>
现在,我需要一个数据列表,以类似的方式填充到同一表格的第二列中,用于另一个标记“male”。当我尝试第二次类似的
WP_Query
, 它返回数据,但要么填充到错误的行或单个单元格,要么完全脱离表。当我尝试各种各样的
<tr> and <td>
. 所以,我是
unable to get the data listed into the second column 与第一列完全相同。
写了这么多之后,我才意识到这个问题可以归类为非wordpress问题,所以如果你觉得我应该在某个地方问这个问题,请让我知道,否则我会非常感激你的帮助。下面是当前结果的屏幕截图。请帮忙。
最合适的回答,由SO网友:s_ha_dum 整理而成
下面是您的代码发生的情况:
query_posts
使用global
变量wp_query
. 它总是写入那个变量,这就是为什么should not use
query_posts
几乎从来没有你的第一次query_posts
重击原作$wp_query
数据启动循环时,在该循环中要做的第一件事是重置$wp_query
到原始查询。现在$wp_query
global
具有循环启动时的不同数据然后你就大打出手了$wp_query
再次启动一个新循环,然后再次重置查询
换句话说,您的数据会被覆盖,并且会以几种不同的方式失去同步。解决方法是
not use query_posts
. 使用新的
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_postdata
--
setup_postdata($female_query->posts[$i])
-- 尽管在这种情况下,这可能有点过头了。
SO网友:Mayeenul Islam
首先不要使用query_posts()
, 它将修改原始循环;使用WP_Query()
相反(Why?). 你可以根据需要给他们打电话(See here).
<?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
?>