我的网站要求人们可以搜索标签和类别(城镇和县)中包含的术语。
我在使用“Search Everything”插件时遇到了一些资源问题,这导致mysql数据库被锁定,速度大大减慢。我不怪插件,我怪我的共享主机。
但是,我想知道是否可以通过简单地将post标记和类别名称附加到\\u内容中来避免使用插件within the database (而不是使用我认为只会在页面上呈现的术语中包含的过滤器),以便in-built WordPress search 然后才能令人满意并找到这些条款。
我已经阅读了很多不同的codex页面和教程,但没有找到我需要的内容,但我希望有人能看看下面的代码,并给出他们对它是否可行的想法(我目前没有可用的测试服务器,并且犹豫是否在现场运行!)(注意,本示例仅包括目前为止的标记)
function tags_in_content($post_id, $post) {
$content = get_the_content();
$tags = get_tags();
$content->append(\'$tags\');
}
add_action ( \'publish_post\', \'tags_in_content\' );
It can\'t be that simple can it?!
非常感谢任何人能给我的帮助!
SO网友:Simon
我想说最好的方法是使用save_post
操作,每次在编辑屏幕中修改帖子时都会运行该操作。在写作和阅读时,这需要相当多的摆弄post_content
到/来自数据库。在下面的示例中,我将post标记列表添加到post_content
. 一个棘手的问题是在其自己的回调中删除并读取过滤器,否则最终会出现无限循环。
add_action( \'save_post\', \'my_save_post\' );
function my_save_post( $post_id ) {
$divider = "<!-- DIVIDER -->"; // We\'ll use this as a divider of actual post_content and our tag list
//verify post is not a revision
if ( !wp_is_post_revision( $post_id ) ) {
// Remove filter to avoid infinite loop
add_action( \'save_post\', \'my_save_post\' );
$post = get_post($post_id);
$content = $post->post_content;
// Strip away old tags
$editor_content = array_shift(explode($divider, $content));
// Add new tag list to end of post_content
$editor_content .= "\\n" . $divider . "\\n" .implode(", ", wp_get_post_terms($post_id, \'post_tag\'));
// Update post object and and database
$post->post_content = $editor_content;
wp_update_post($post);
// Add filter again
add_action( \'save_post\', \'my_save_post\' );
}
}
您可能还需要添加一个过滤器来删除标记列表表单
post_content
在发送到编辑器文本区域之前。我想
the_editor_content
在这种情况下会做得很好。您想要做的基本上与上述函数的前半部分相同,即除去分隔符之后的所有内容,但不附加新的标记列表(我们不希望它显示在编辑器中,对吧?)。这意味着您可以将其分解为自己的函数,并在这两种情况下使用它,但我将把它留给您。