跳至正文

如何在非 WordPress 网站上显示 WordPress 侧边栏

如何在非 WordPress 网站上显示 WordPress 侧边栏

在处理我的最新项目DevGrow Discussions时,我发现需要将我的整个 WordPress 侧边栏嵌入到非 WordPress 站点——特别是bbPress 论坛由于我使用各种小部件来显示热门帖子和其他动态内容,因此简单地复制和粘贴 HTML 是不够的。最后,实际上只有两种方法可以解决这个问题:

  1. 在您的应用程序中包含您的wp-load.php文件,实际上加载整个 WordPress 以访问插件功能
  2. 使用简单缓存以 HTML 格式存储侧边栏并将其包含在任何其他应用程序中,然后在发布新内容时根据需要重建它

如果不够明显,第一个选项在数据库查询方面的成本非常高,并且会显着降低您的网站速度。第二种选择在实施时需要付出一些努力,但在性能方面没有竞争。

缓存你的 WordPress 侧边栏

在我们可以编写我们的函数之前,我们需要准确地理解我们想要做什么。我们的目标是将侧边栏缓存到一个文本文件中,并在我们发布帖子、更改主题或对侧边栏小部件进行更改时更新该缓存。由于我们计划使用我们的缓存在不同的应用程序上显示侧边栏,我们需要能够轻松删除缓存而不会产生任何不良影响(我们不希望我们的侧边栏随时损坏)。

为了有效地完成此任务,我们还将创建缓存文件的日志,使用它来确定是否应清除缓存如果是这样,下次有人访问 WordPress 站点时,实际的缓存文件将被覆盖,确保始终在两个应用程序上呈现正确的侧边栏。

创建函数

首先,打开主题的functions.php文件并向其中添加以下函数:

1个
2个
3个
4个
5个
6个
7
8个
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48岁
49
function cache($task, $cacheFile, $cacheTime = 21600){
global $cache;
 
// Configure files and directories:
$cacheDir = TEMPLATEPATH."/cache";
$cacheFileName = $cacheDir."/cache-$cacheFile.txt";
$cacheLogFile = $cacheDir."/cache-log.txt";
 
// Make cache directory if it doesn't exist
if(!is_dir($cacheDir)) mkdir($cacheDir, 0755);
 
// Make a log of the cache files with their current status
if(file_exists($cacheLogFile))
$cacheLog = unserialize(file_get_contents($cacheLogFile));
else
$cacheLog = array();
 
if($task == 'start'){
// If cache exists, is less than 6 hours old and is not in deletion queue, keep it - otherwise rebuild cache
if(file_exists($cacheFileName) && (time() - filemtime($cacheFileName)) < $cacheTime && $cacheLog[$cacheFile] == 1){
$cache = false;
} else {
$cache = true;
ob_start();
}
}elseif($task == 'end' && $cache){
// If caching, save file contents and update log
file_put_contents($cacheFileName,ob_get_contents());
ob_end_flush();
$cacheLog[$cacheFile] = 1;
file_put_contents($cacheLogFile,serialize($cacheLog));
}elseif($task == 'purge'){
// Set cache to delete and update log
$cacheLog[$cacheFile] = 0;
file_put_contents($cacheLogFile,serialize($cacheLog));
}
 
}
function cache_purge(){
$cacheDir = TEMPLATEPATH."/cache";
$cacheLogFile = $cacheDir."/cache-log.txt";
if(file_exists($cacheLogFile))
$cacheLog = unserialize(file_get_contents($cacheLogFile));
else
$cacheLog = array();
foreach($cacheLog as $key=>$value)
$cacheLog[$key] = 0;
file_put_contents($cacheLogFile,serialize($cacheLog));
}

这些第一个函数cache是让我们的缓存工作的关键。根据您在文件中调用它的位置,该函数将设置正确的文件和目录,验证是否需要构建缓存,如果需要,将保存输出并更新缓存日志。该函数使用 PHP 的输出缓冲将生成的任何 HTML 保存到文本文件中。

第二个函数用于清除所有缓存文件,对于添加到现有的WordPress 挂钩非常有用。有了它,我们可以在每次更新主题、保存帖子或更新侧边栏小部件时清除缓存,方法是在functions.php的末尾添加以下内容:

1个
2个
3个
add_action('switch_theme','cache_purge', 10);
add_action('publish_post','cache_purge', 10);
add_filter('widget_update_callback','cache_purge', 10);

有关挂钩的完整列表,请查看WordPress 插件 API 参考

配置你的侧边栏

现在您已准备好函数,可以开始缓存侧边栏了。打开sidebar.php并将此行添加到文件的开头:

1个
<?php cache('start', 'sidebar'); ?>

这个函数将开始缓存它需要的侧边栏,否则它什么都不做。由于 PHP 输出缓冲功能的工作方式,我们还需要在文件末尾关闭缓冲区。将此行添加到同一文件的最底部:

1个
<?php cache('end', 'sidebar'); ?>

添加这两行后,刷新您的博客。您不会在浏览器中看到任何内容,但检查主题文件夹中的/cache目录,您应该会看到两个以cache-开头的文件。

使用你的缓存

现在您已经创建了缓存文件,您可以在任何可以访问它的应用程序中使用它。您可以使用include_once函数轻松执行此操作,但为了安全起见,我也喜欢确保文件存在:

1个
2个
3个
4个
5个
6个
7
<?php
$myCachedFile = "/path/to/cache-sidebar.txt";
if(file_exists($myCachedFile))
include_once($myCachedFile);
else
echo "Cache doesn't exist.";
?>

请务必仔细检查您的文件路径是否正确。如果要将缓存设置为从外部应用程序中删除,则必须在脚本中的某处包含cache_purge函数,并在必要时简单地调用它。之后,只需调用函数即可:

1个
<?php purge_cache(); ?>

结论

这种技术对任何 PHP 应用程序都非常有用,尤其是当您希望在不牺牲性能的情况下显示动态内容时。用它来加速您的 WordPress 安装或能够在任何其他网站或应用程序上使用有用的位(如侧边栏)。

wp侧边栏

标签:

发表回复