Вопрос или проблема
Я хочу получить содержимое wp_editor (tinymce), а затем найти предложение по определенному слову с помощью регулярных выражений. Однако не знаю, как получить содержимое.
Когда пост опубликован или обновлен, функция получает содержимое и затем находит предложение по конкретному слову.
Мое регулярное выражение для получения целого предложения:
$regex = '/<p>Глава(.*?)<\/p>/'; //Определенное слово = Глава
$chapnumber="";
$chaptitle="";
$chapcontent = "<p>Глава 136 – Тибет и Западный Турк</p>"; //Это должно быть содержимое
if (preg_match($regex, $chapcontent, $matches)) {
echo $matches[1];
}
Есть какие-нибудь решения по этому поводу?
Я еще не могу комментировать… так что я воспользуюсь ответом, думаю, вам нужно сделать это с помощью фильтра ‘wp_insert_post_data’.
Вы можете увидеть это на строке 3523 здесь: https://developer.wordpress.org/reference/functions/wp_insert_post/
Ваша функция должна иметь параметр, который является массивом. Оттуда вы должны получить содержимое из ключа ‘post_content’.
add_filter( 'wp_insert_post_data', 'example' );
function example( $data ){
$post_content = $data['post_content'];
// ... делайте свои дела
$data['post_content'] = $post_content;
return $data;
}
Примечание: это не получит содержимое tinymce, это получит данные непосредственно перед их введением в базу данных. Вам также стоит обратить внимание на шорткоды, я не думаю, что вы сможете изменить содержимое в шорткодах с помощью этого фильтра. Надеюсь, это поможет вам или кому-то другому.
Вы можете подключить функцию фильтрации к save_post
действует, а затем получить содержимое поста либо из переменной $_POST
, либо с помощью get_post($post_id)
для фильтрации.
Исправил сам, вместо того чтобы делать ajax. Это проще для меня:
$post_content = wpautop( $post->post_content );
Ответ или решение
Для решения задачи извлечения содержимого редактора wp_editor
(TinyMCE) и поиска предложения по заданному слову с использованием регулярного выражения, рекомендуется использовать хук save_post
или фильтр wp_insert_post_data
. Оба метода позволяют получить контент поста, когда он сохраняется или обновляется.
Подход с использованием хука save_post
- Хук
save_post
:
Этот хук срабатывает всякий раз, когда пост сохраняется. Вы можете получить доступ к содержимому поста через переменную$_POST
, если вам нужно это сделать непосредственно при сохранении.
add_action('save_post', 'get_post_content_on_save');
function get_post_content_on_save($post_id) {
// Проверяем, наши ли данные
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return;
// Получаем данные поста
$post = get_post($post_id);
$post_content = wpautop($post->post_content);
// Ваше регулярное выражение для поиска
$regex = '/<p>Chapter(.*?)<\/p>/'; // Используйте данный шаблон
if (preg_match($regex, $post_content, $matches)) {
// Выводим найденное соответствие
echo $matches[1]; // Выводит контент, удовлетворяющий регулярному выражению
}
}
- Ограничения:
Обратите внимание, что регулярные выражения чувствительны к формату HTML. Убедитесь, что между вашим тегом<p>
и текстом "Chapter" нет лишних пробелов или символов, которые могут повлиять на поиск.
Подход с использованием фильтра wp_insert_post_data
Этот метод более гибкий и подходит для случаев, когда необходимо обработать контент перед тем, как он будет сохранен в базу данных.
add_filter('wp_insert_post_data', 'filter_post_content', 10, 2);
function filter_post_content($data, $postarr) {
// Получаем содержимое поста
$post_content = $data['post_content'];
// Ваше регулярное выражение для поиска
$regex = '/<p>Chapter(.*?)<\/p>/'; // Используйте данный шаблон
if (preg_match($regex, $post_content, $matches)) {
// Обработка или использование найденного значения
// Например, можно сохранить его в метаполе
update_post_meta($postarr['ID'], 'found_chapter', $matches[1]);
}
return $data; // Возвращаем измененные данные
}
Обработка коротких кодов
Следует помнить, что при манипуляциях с содержимым, которое может содержать шорткоды, порядок их обработки имеет значение. Убедитесь, что вы учитываете наличие шорткодов перед их обработкой, так как они могут изменять результат регулярных выражений.
Заключение
Выбор метода обработки поста зависит от ваших требований к проекту. Хук save_post
позволяет получить контент непосредственно при сохранении, в то время как фильтр wp_insert_post_data
дает возможность манипулировать данными перед их вставкой в базу данных. Учтите применимость регулярных выражений к вашему конкретному контенту и форматированию.
Таким образом, вы можете эффективно извлечь нужную вам информацию из содержимого редактора wp_editor
, используя приведенные выше подходы.