问题解决了,谢谢@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
. 结果是一场灾难!它会立即减慢帖子页面的速度。
我的问题是,我如何重写此函数以节省一些数据库负担,或者是否有其他方法来实现这一点?