使用ServiceWorker预存WordPress帖子

时间:2017-10-12 作者:Ben Brocka

我一直在用Offline Content Mozilla为我的网站实现离线功能的插件,我很高兴,但它的在线预处理选项包括页面。我最重要的内容,我的指南,都在帖子里。

Mozilla插件似乎被放弃了,所以我想我应该制作一个修改版本供自己使用。我在这里找到了脱机内容获取页面并将其提供给serviceworker缓存的代码:

  private function get_precache_list() {
    $precache_options = $this->options->get(\'offline_precache\');
    $precache_list = array();
    if ($precache_options[\'pages\']) {
        foreach (get_pages() as $page) {
            $precache_list[get_page_link($page)] = $page->post_modified;
        }
    }
    return $precache_list;
}
我添加了以下内容,希望缓存我的贴有标签的指南

        $args = array( \'category_name\' => \'Guides\', \'numberposts\'=> 10 );
        foreach (get_posts( $args ) as $page) {
            $precache_list[get_page_link($page)] = $page->post_modified;
        }
它似乎在安装serviceworker时加载页面;我看到他们在网络选项卡中被调用,状态为200。但是,如果我脱机并导航到加载的帖子,它们就不起作用(经常出现脱机浏览器错误),而预加载的页面则起作用。

我承认,我不完全确定问题是我如何获取Wordpress内容还是服务工作者,但工作内容和非工作内容之间的唯一区别似乎是它们是帖子而不是页面。有没有什么不同的方法可以让这些帖子发挥作用?

我很惊讶地发现插件库中几乎没有其他ServiceWorker实现。如果有一个现有的插件可以为我做到这一点,我对此持开放态度,我只希望能够在ServiceWorker中预先设置这些插件,而无需更改我发布文章的方式;虽然页面缓存很好,但没有理由将此内容重新发布为一个页面来缓存它。

1 个回复
最合适的回答,由SO网友:Ben Brocka 整理而成

这并不是我所期望的解决方案,但我找到了另一个插件,它可以更好地处理Service Worker,并添加了我所需的功能,尽管我必须手动列出帖子,而不是通过编程。

更好的插件是Above The Fold Optimization (忽略1星评论,这是一个插件,如果你使用错误,它会破坏你的网站,但绝对不建议业余爱好者使用)。它有一个可选的ServiceWorker,您可以安装它,包括预缓存和比表面上废弃的Mozilla插件多得多的选项。我甚至发现,在以更方便缓存的方式延迟CSS/Javascript时,它比自动优化更有用、更快。

我仍然不能完全确定为什么我之前尝试的其他ServiceWorker实现没有成功,但现在这确实符合我缓存特定帖子的标准。

结束

相关推荐

无法禁用“Site Offline”消息

我们安装了一个插件,在更新过程中让我们的网站离线几天。但在完成更新后,我们无法删除“站点脱机”消息。最后我们卸载了插件,但frontpage仍然显示“站点脱机”。关于如何让网站再次“在线”有什么建议吗?(不,插件开发人员不回复我们的电子邮件。)