我正在为客户提供Wordpress网站。该网站有一个自定义主页。每个星期六,我的客户端都会使用新内容填充主页,以便删除旧内容并接管新内容。所以主页每周只更新一次。
现在,我的客户希望能够在一周内逐步使用新内容填充页面并预览更改(没有常规访问者看到更新的内容)并安排主页在星期六的每个人都使用新内容进行更新查看。
有什么办法,在主页重新填充星期六的新内容之后,有点“冻结”页面并向常规访问者提供静态HTML,而像我的客户端这样的登录用户将能够看到页面的动态版本,并预览他们在一周内所做的更改。然后在接下来的星期六用新内容自动“刷新”页面,并再次“冻结”它?
暂存/版本控制环境可能在这里有点过分,因为它只适用于一个页面(主页),也因为我不认为我的客户(非技术人员)可以很好地管理升级。缓存插件可能无法正常工作,因为据我了解,如果用户在其浏览器中清除缓存,它将显示他们不希望看到的所有新内容......
任何帮助将不胜感激!谢谢!
答案 0 :(得分:2)
我建议您使用Transients API。因此,在您的主页模板上,您将首先看到访问者是否已登录。如果他们已登录,则显示主页的实际内容。如果不是,则会得到瞬态(get_transient()
),如果它仍处于活动状态(它不会返回false
),则显示它。如果它返回false
,则执行ob_start()
,显示主页的实际内容,然后执行$contents = ob_get_clean();
,使用set_transient()
和echo $contents;
更新瞬态。
除此之外,您还可以向init
,template_redirect
或您喜欢的任何其他挂钩添加操作(只要在每次加载页面时触发)。在那里,您必须检查是否有时间显示主页的新内容。如果是,则使用delete_transient()
删除瞬态,因此您的主页将更新。
我现在没有时间给你一个代码示例,但我认为你应该能够找出代码。
答案 1 :(得分:1)
我会使用“未来”帖子状态..
WordPress能够“安排”帖子。 所以你告诉你的客户“安排”将帖子发布到他想要的那一天,在他去的整个星期。
然后,你有很多方法可以确保只有一个小组可以看到它们,例如管理员 - 通过使用一些conditions来表示:
if (is_admin()) {
}
现在,正如我所说,通过过滤查询,添加新查询,添加multiple loops等等,有很多方法可以实现这一目标。
例如:
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 ..
所以这样,页面将对“普通”用户正常运行 - 直到更新日期,但会显示管理员的调度帖子(或登录,或特定用户,或任何你想要的条件)
更新I:根据评论的概念证明:
警告:丑陋的非效率代码。概念演示..
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() - 将所有条件设置为您想要的任何条件,将此概念用于多循环操作。