Wordpress“冻结”主页?

时间:2012-12-03 04:01:33

标签: wordpress

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

现在,我的客户希望能够在一周内逐步使用新内容填充页面并预览更改(没有常规访问者看到更新的内容)并安排主页在星期六的每个人都使用新内容进行更新查看。

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

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

任何帮助将不胜感激!谢谢!

2 个答案:

答案 0 :(得分:2)

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

除此之外,您还可以向inittemplate_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() - 将所有条件设置为您想要的任何条件,将此概念用于多循环操作。