将数据追加到数据库中的_Content(不使用筛选器)

时间:2013-01-30 作者:Jo_pinkish

我的网站要求人们可以搜索标签和类别(城镇和县)中包含的术语。

我在使用“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?!

非常感谢任何人能给我的帮助!

1 个回复
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 在这种情况下会做得很好。您想要做的基本上与上述函数的前半部分相同,即除去分隔符之后的所有内容,但不附加新的标记列表(我们不希望它显示在编辑器中,对吧?)。这意味着您可以将其分解为自己的函数,并在这两种情况下使用它,但我将把它留给您。

结束

相关推荐