我正在尝试创建一个函数,在保存(the_content)时对帖子内容进行文本替换。
存根函数如下,但如何获取对帖子内容的引用,然后将过滤后的内容返回到“publish_post”例程?
但是,我的替换是不工作和/或没有将更新的post_content传递给publish函数。价值永远不会被取代。
function my_function() {
global $post;
$the_content = $post->post_content;
$text = " test ";
$post->post_content = str_ireplace($text, '<b>'.$text.'</b>', $the_content );
return $post->post_content;
}
add_action('publish_post', 'my_function');
答案 0 :(得分:6)
当您提到the_content
时,您是引用模板标签还是过滤器挂钩?
the_content
作为过滤器挂钩仅适用于数据库读取期间的发布内容,而不是写入。在将内容保存到数据库之前修改帖子内容时使用的过滤器是content_save_pre
。
代码示例
在插件或主题的functions.php中,使用$content
作为参数添加您的函数。以您希望的方式修改内容,并确保返回$content
。
然后在WordPress中遇到过滤器挂钩时使用add_filter('filter_name', 'function_name')
来运行该函数。
function add_myself($content){
return $content." myself";
}
add_filter('content_save_pre','add_myself');
如果我写的帖子包括:
“到帖子的末尾,我想添加”
保存到数据库并显示在网站上时,它将显示为:
“在帖子的末尾,我想添加自己”。
您的示例过滤器可能会修改为如下所示:
function my_function($content) {
$text = " test ";
return str_ireplace($text, '<b>'.$text.'</b>', $content );
}
add_filter('content_save_pre','my_function');
答案 1 :(得分:0)
可能更容易做到这样的事情:
function my_function($post) {
$content = str_ireplace(" test ", '<b>'.$text.'</b>', $post->content);
return $content;
}
较少关注函数的内部,但想法是将对象传递给()
中的函数,然后直接调用而不是全局化值。它应该更直接。
答案 2 :(得分:0)
这里传递的变量是$ id。这应该有效:
function my_function($id) {
$the_post = get_post($id);
$content = str_ireplace(" test ", '<b>'.$text.'</b>', $the_post->post_content);
return $content;
}
add_action('publish_post', 'my_function');