0

我正在为客户开发一个 Wordpress 网站。该网站有一个自定义主页。每个星期六,我的客户都会用新内容填充主页,因此旧内容会被删除,新内容会接管。所以主页每周只更新一次。

现在,我的客户希望能够在一周内逐渐用新内容填充页面并预览更改(没有定期访问者看到更新的内容),并安排主页在周六更新新内容以供所有人查看。

有什么办法,在周六主页重新填充新内容后,有点“冻结”页面并向普通访问者提供静态 HTML,而像我的客户这样的登录用户将能够看到动态版本页面并预览他们在一周内对其所做的更改。然后在接下来的星期六用新内容自动“刷新”页面,并再次“冻结”它?

登台/版本控制环境在这里可能会有点过头了,因为它只适用于一个页面(主页),而且我认为我的客户,一个非技术人员,不能很好地管理登台。缓存插件可能也不起作用,因为据我了解,如果用户清除浏览器中的缓存,它将显示他们不希望看到的所有新内容......

任何帮助将非常感激!谢谢!

4

2 回答 2

2

我建议您使用Transients API。因此,在您的主页模板上,您将首先查看访问者是否已登录。如果他们已登录,您将显示主页的实际内容。如果它们不是,您将获得瞬态(get_transient()),如果它仍然处于活动状态(它不返回 a false),则显示它。如果它返回false,您将ob_start()显示主页的实际内容,然后使用和$contents = ob_get_clean();更新您的瞬态。set_transient()echo $contents;

除此之外,您可以向init,template_redirect或您喜欢的任何其他钩子添加一个动作(只要它在每次页面加载时触发)。在那里,您必须检查是否该显示主页的新内容。如果是,您使用delete_transient()删除瞬态,因此您的主页将更新。

我现在没有时间给你一个代码示例,但我认为你应该能够弄清楚代码。

于 2012-12-03T07:20:24.017 回答
1

我会使用“未来”的帖子状态..

WordPress 具有“安排”帖子的能力。因此,您告诉您的客户将帖子“安排”到他想要的某一天,在他去的整个星期中。

然后,您有很多方法可以确保只有一个组可以看到它们,例如管理员 - 通过使用以下条件

if (is_admin()) {

}

现在,正如我所说,这里有很多方法可以实现这一点,通过过滤查询、添加新查询、添加多个循环等,等等。

例如 :

  if (is_admin()) { // if we are admin - or any other conditional wanted
// start a new query
$my_query = new WP_Query('post_status=future');
while ($my_query->have_posts()) : $my_query->the_post();
//do the thing
wp_reset_postdata();
// start the normal query ...
    }

另一种方法是在循环内正常使用 get_post_status()

$status = get_post_status();

if ($status == 'future') && (is_admin()) {
//display post as you would
} 
// continue normal query / post display here ..

因此,这样,该页面将对“普通”用户正常运行 - 直到更新日期,但会显示管理员的预定帖子(或已登录,或特定用户,或您想要的任何条件)

更新一:根据评论的概念证明:

警告:丑陋的非高效代码。概念演示..

while ( have_posts() ) : the_post(); 
// start here 

                    $future_q = new WP_Query( 'post_status=future' );

                    while ( $future_q->have_posts() ) : $future_q->the_post();
                    if (current_user_can( 'administrator' ) == TRUE ){
                    the_title();}
                    endwhile;
                    wp_reset_postdata();

                    echo 'Normal start here :';
                    the_title();

上面的代码适用于我的设置。确实,它是丑陋的代码,效率不高,不是最好的方法,但它是一个概念证明,可以使用future帖子状态来完全按照 OP 的要求进行操作。您可以通过修改和过滤查询变量、更改循环或检查循环内部的循环状态,甚至使用 get_posts() 将这个概念付诸实践——所有这些都可以满足您想要的任何条件。

于 2012-12-03T07:59:32.017 回答