根据帖子标题字符串自动创建内部链接的优化功能

时间:2017-01-27 作者:吉 宁

问题解决了,谢谢@SamuelElh提供的提示,所以我在代码中发布了它。事实证明,瞬态是正确的解决方案。

我编写了一个函数,可以添加到帖子中出现的现有帖子标题的链接。例如,当您向网站添加标题为“this is a title”的帖子,然后另一篇帖子的内容中显示短语“this is a title”时,它将自动链接到保存该标题的前一篇帖子。

我的函数工作得很好(除了一件事我将在后面解释):

function ji_title_auto_link($content){
if (is_single()) {//only auto link on post pages.
    global $post;
    global $wpdb;
 //retrieve all the post titles from the database,and this is where it goes nasty cause I have more than 50000 post!
 // UPDATE:Check for transient. If none, then execute $titledb
 if (false === ( $titledb = get_transient( \'titledb\' ) )) {
 $titledb=$wpdb->get_results("SELECT post_title FROM $wpdb->posts WHERE post_status = \'publish\'");
  set_transient( \'titledb\', $titledb, 12 * HOUR_IN_SECONDS );
}

foreach ($titledb as $key) {
    $titles=$key->post_title;//foreach all the titles
    $link=get_permalink();
    $replace=\'<a target="_blank" title=\'.$titles.\' href="http://12reads.cn/wiki/\'.$titles.\'">\'.$titles.\'</a>\';
    $titleself=get_the_title();//make sure it don\'t link itself
    $pos=strpos($content, $titles);
    if ($pos !== false) {
        $length=strlen($titles);
        if ($titles != $titleself) {
            $content=substr_replace($content, $replace, $pos, $length);
        }

        unset($key);
    }
}
//echo get_the_title();
return $content;
}else{return $content;}
 }
add_filter(\'the_content\', \'ji_title_auto_link\');
这个功能的问题是,我的网站上有50000多个帖子。假设我必须使用$wpdb->get_results. 结果是一场灾难!它会立即减慢帖子页面的速度。

我的问题是,我如何重写此函数以节省一些数据库负担,或者是否有其他方法来实现这一点?

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

使用缓存插件(或编写自己的自定义缓存插件)为这些帖子提供服务器这样,您的原始内容保持不变,但您仍然可以从服务器得到快速响应。

相关推荐

如何同时使用wpdb导出和导入?

当我使用WP-CLI 我对wp db export和wp db import命令有一些问题。我的桌面上有一个本地站点,我想迁移到我的笔记本电脑上,这样我就可以使用它了。因此,我在桌面上,导航到适当的目录并键入wp db export. 成功创建文件:ccv3-2018-07-12-4e523fb.sql这是我不明白的部分。我将它在桌面上创建的SQL文件复制粘贴到本地网站所在的笔记本电脑目录。I类型wp db import ccv3-2018-07-12-4e523fb.sql --authors=skip