从类别中的最新帖子中获取ID以用于类别档案

时间:2012-05-23 10:48:26

标签: wordpress categories

我正在尝试获取每个类别中最新帖子的ID,并使用该ID获取元信息和缩略图并将其显示在相应类别旁边。我只是不确定该怎么做。

我一直在尝试这段代码,但它对我不起作用:

<?php
$args=array(
  'orderby' => 'name',
  'order' => 'ASC'
  );
$categories=get_categories($args);
foreach($categories as $category) : ?>

    <?php $randpost = get_posts(
        array(
            'numberposts' => 1,
            'category' => array( get_query_var($category->id)),
        ));
    $randpostid = ($randpost->ID);
    ?>

    <?php echo '<h2 class="newsitem"><a href="' . get_category_link( $category->term_id ) . '" title="' . sprintf( __( "View all posts in %s" ), $category->name ) . '" ' . '>' . $category->name.'</a> </h2> '; ?>
    <?php echo '<p>'. $category->count . ' nummer</p>'; ?>

    <strong>Stad:</strong>
    <?php $city = get_post_meta($randpostid, 'city', true); ?>
    <?php echo $city ?> 

<?php endforeach; ?>

我做错了什么?

2 个答案:

答案 0 :(得分:1)

除了一行外,你所拥有的一切看起来都是正确的。你需要改变:

'category' => array( get_query_var($category->id)),

要:

'category' => $category->cat_ID

类别对象没有'id'属性,而是'cat_ID'属性。

另外:如果由于某种原因无法解决您的问题,我唯一能想到的就是改变这一行:

$randpostid = ($randpost->ID);

要:

$randpostid = ($randpost[0]->ID);

get_posts()返回一个数组,但是当我返回单个帖子时,我不确定它是否是数组格式。无论哪种方式,第一次代码更改都是必须的,第二次可能是必需的。

答案 1 :(得分:0)

如果您刚刚显示最新帖子中的信息,您可能会以更简单的方式执行此操作。您的页面模板中的此类内容应该有效(未经测试):

修改

根据OP评论编辑的答案:

<?php
$cat_args = array('orderby' => 'name','order' => 'ASC'); //for parameters see http://codex.wordpress.org/Function_Reference/get_categories

$categories=get_categories($cat_args);

foreach($categories as $category) { // for each category we as for the most recent post

$post_args = array('numberposts' => 1, 'category' => $category, 'orderby' => 'post_date', 'order' => 'DESC', );

$posts_array = get_posts( $post_args );

foreach($lastposts as $post) : setup_postdata($post); //Use setup_postdata to access parts of the object using regular WP template tags ?> 

    <?php post_id = get_the_ID(); // or you could just use $post->ID ?>

    <!--Do your stuff here-->

<?php endforeach; ?>

<?php } ?>