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

Php 在单个模板上显示当前帖子,php,wordpress,Php,Wordpress,我有一个插件,它会自动使帖子过期,并在某个日期将帖子状态更改为“存档” 然后我们有一个档案室,里面有所有这些帖子。我仍然想显示文章的数据,但它给出了一个找不到的页面 我可以更改查询以在单个模板上显示此帖子吗 我试过以下方法,但它能吸引所有的归档帖子,而不仅仅是你所在的页面 <?php $my_query = new WP_Query('post_status=archive'); ?> <div> <?php if ($my_query->ha

我有一个插件,它会自动使帖子过期,并在某个日期将帖子状态更改为“存档”

然后我们有一个档案室,里面有所有这些帖子。我仍然想显示文章的数据,但它给出了一个找不到的页面

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

我试过以下方法,但它能吸引所有的归档帖子,而不仅仅是你所在的页面

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


Post status允许用户在WordPress中为帖子设置工作流状态

WordPress使用8种默认状态。它们是
已发布
未来
草稿
待定
垃圾
自动草稿
,以及
继承

如果一篇文章刚刚创建并且没有任何以前的状态,那么它也可能有一个新的状态

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

post状态允许用户在不发布文章并将其保存为草稿的情况下处理文章。这样他们可以稍后回去完成它。它还允许用户安排帖子,使帖子的状态为
future
,或者将帖子设置为私有。附件的post状态为“继承”。对于多作者博客,
pending
状态非常有用,因为投稿人可以在发布之前提交文章供审查

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

编辑:您是否可以尝试更改您的WP查询(仅用于测试),如下所示:


$my\u query=new WP\u query(数组('post\u status'=>array('pending','archive','publish'));
并查看结果?

您获得所有存档帖子的原因是,您使用
post\u status=archive
查询的是一个全新的查询

为了解决这个问题,我一直在尝试使用一些代码来利用WordPress动作API,比如
pre_get_posts
,但它对我来说并不正常,主要是因为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并将其添加到查询中。因此,您将获取当前帖子,并具有
publish
archive
post\u状态,以便查询所有具有两种post\u状态的帖子

不幸的是,在我的测试中,它对未登录的访问者不起作用。它对已登录的用户起作用


让我听听评论中的结果。

感谢@josephting&@bodi0让我以一种不同的方式思考,实际上解决了这个问题,而无需调整原始循环中的单个模板(我曾在另一个网站上使用这个来获得未来的帖子):


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

您是否希望存档的帖子仍然可以被公众访问,这是您想要的吗?默认情况下,WordPress将只向公众显示
“post\u status”=>“publish”
。@josephting是的,但通过将我的代码放入其中,它会循环所有内容而不仅仅是显示你当前的帖子。
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' );
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' );