在单个模板上显示当前帖子

时间:2014-04-22 10:24:14

标签: php wordpress

我有一个插件会自动过帐帖子并将其状态更改为" archive"在某个特定日期。

然后我们有一个存档部分,其中包含所有这些帖子。我仍然想显示帖子的数据,但是它找不到页面。

我可以更改查询以在单个模板上显示此帖子吗?

我已尝试过以下操作,但它会提取所有存档帖子,而不仅仅是您所在的页面。

<?php
$my_query = new WP_Query('post_status=archive');
?>
<div>
    <?php
    if ($my_query->have_posts()) : while ($my_query->have_posts()) :
        $my_query->the_post();
        ?>
        <ul>
          <li>
           <?php the_title(); ?>
          </li>
        </ul>
    <?php endwhile; else: ?>
        <div>
        <ul>
          <li><?php _e('No upcoming Posts'); ?></li>
        </ul>
        </div>
    <?php endif; ?>
</div>

4 个答案:

答案 0 :(得分:1)

帖子状态允许用户为WordPress中的帖子设置工作流程状态。

WordPress使用8种默认状态。它们是publishedfuturedraftpendingtrashauto-draftinherit

如果帖子刚创建并且之前没有任何状态,则该帖子也可能具有new状态。

WordPress主题和插件还可以为更复杂的网站定义自定义帖子状态。这些状态允许用户在管理面板中组织他们的帖子。它们对于拥有多位作者或复杂的编辑过程的网站特别有用。

发布状态允许的一些内容是用户在不发布文章的情况下处理文章并将其另存为草稿。通过这种方式,他们可以稍后返回并完成它。它还允许用户安排帖子,使帖子的状态为future,或将帖子设为私有。附件的帖子状态为inherit。对于多作者博客,pending状态可能很有用,因为贡献者可以在发布之前提交帖子以供审核。

在您的情况下,您必须100%确定已归档的帖子获取状态archive,否则您的WP查询将无效,因此请检查您使用的此插件是否设置此帖子类型(简单方法是直接查看MySQL数据库,表wp_posts,或者,如果您无法通过MySQL访问PHPMyAdmin服务器 - 那么请查看插件本身的源代码。)。

编辑:你可以尝试,只是为了测试,改变你的WP查询:

$my_query = new WP_Query( array( 'post_status' => array( 'pending', 'archive', 'publish' ) ) );并查看结果?

答案 1 :(得分:1)

您获取所有已归档帖子的原因是您使用post_status=archive查询全新查询。

要解决这个问题,我一直在尝试使用一些代码来使用像pre_get_posts这样的WordPress Action API,但它对我来说无法正常工作,主要是因为WordPress已经抛出了404错误。

因此,最好在模板中覆盖此内容,例如single.php

<?php
$post_id = get_query_var('p');
$args = array(
  'p' => $post_id,
  'post_status' => array( 'publish', 'archive' )
);
$my_query = new WP_Query($args);
?>

我可能会建议先尝试一下。正如我所提到的,你收到了档案中的所有帖子。在这种情况下,您将获得帖子ID并将其添加到查询中。因此,您将使用publisharchive post_status获取当前帖子,以便查询包含post_status的所有帖子。

不幸的是,在我的测试中,它只适用于未登录的访问者。它适用于已登录的用户。

让我听听评论中的结果。

答案 2 :(得分:0)

感谢@josephting&amp; @ bodi0让我以不同的方式思考,实际上解决了它而没有通过使用这个来调整原始循环中的单个模板(我在另一个网站上使用它来获取未来的帖子):

add_filter('the_posts', 'show_future_posts');
function show_future_posts($posts)
{
   global $wp_query, $wpdb;
   if(is_single() && $wp_query->post_count == 0)
   {
      $posts = $wpdb->get_results($wp_query->request);
   }
   return $posts;
}

对于所有其他解决方案,要么仍然没有找到页面,要么没有完全显示数据。

答案 3 :(得分:0)

Display post by ID:
$query = new WP_Query( 'post_status=archive&p=7' );

Display page by ID:
$query = new WP_Query( 'post_status=archive&page_id=7' );