将wp_Query数据放入html表

时间:2013-09-29 作者:gurung

我需要在一个简单的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问题,所以如果你觉得我应该在某个地方问这个问题,请让我知道,否则我会非常感激你的帮助。下面是当前结果的屏幕截图。请帮忙。enter image description here

2 个回复
最合适的回答,由SO网友:s_ha_dum 整理而成

下面是您的代码发生的情况:

  1. 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
?>

结束

相关推荐

Separate table or usermeta

我们正在为用户创建自定义字段,如年收入、性别、城市、国家等。大约有10多个新字段。我们将在一个月内通过CSV导入功能为每个用户导入大约30000条记录。旧记录将有新记录和更新记录。这一进程将持续一年。在这种情况下,请建议从中选择哪个选项场景1:使用这些新字段创建一个新的WordPress表场景2:使用wp\\u usermeta添加自定义字段除了CSV导入之外,我们还将定期提取用户的报告。这将使wp\\u usermeta表保持忙碌。请建议我们应该采取哪种方案以及为什么?我的建议是使用场景1,因为在这里我