Как отфильтровать содержимое публикации во время процедуры публикации / сохранения с помощью str_ireplace ()? - PullRequest
1 голос
/ 28 октября 2010

Я пытаюсь создать функцию, которая заменяет текст в содержимом сообщения при его сохранении (the_content).

Функция-заглушка приведена ниже, но как получить ссылку на содержимое публикации, а затем вернуть отфильтрованное содержимое в процедуру publish_post?

Однако моя замена либо не работает и / или не передает обновленный post_content в функцию публикации. Значения никогда не заменяются.

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');

Ответы [ 3 ]

6 голосов
/ 10 ноября 2010

Когда вы упоминаете the_content, ссылаетесь ли вы на тег шаблона или хук фильтра?

the_content, поскольку хук фильтра работает только с содержимым записей во время чтения базы данных, а не записи.Фильтр, используемый при изменении содержимого публикации непосредственно перед ее сохранением в БД, имеет значение content_save_pre.

Пример кода

В вашем плагине или в файле functions.php добавьте свою функцию, используя $content в качестве аргумента.Измените содержимое по своему усмотрению и обязательно верните $content.

. Затем используйте add_filter('filter_name', 'function_name'), чтобы запустить функцию при обнаружении ловушки фильтра в WordPress.

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');
0 голосов
/ 28 октября 2010

переданная переменная здесь - $ 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');
0 голосов
/ 28 октября 2010

Наверное, проще сделать что-то вроде этого:

function my_function($post) {
  $content = str_ireplace(" test ", '<b>'.$text.'</b>', $post->content);

  return $content;
}

Меньше внимания было уделено внутренним функциям, но идея в том, что вы передаете объект функции в (), а затем вызываете непосредственно, а не глобализируете значение. Так должно быть более прямым.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...