Skip to content

Commit a8c5f1a

Browse files
author
Alex
committed
fix
Хук заменен правильно: В методе init() мы теперь используем post_updated с передачей 3 аргументов: $this->addHook('post_updated', [$this, 'saveMarkdownContent'], 10, 3); Сигнатура метода обновлена: Метод saveMarkdownContent теперь принимает $post_id, $post_after, $post_before. Логика определения изменений работает: markdown_changed сравнивает новый MD из $_POST со старым MD из базы. html_changed сравнивает post_content до и после сохранения. Логика сохранения/удаления: Если правили MD -> он сохраняется, парсится в HTML и перезаписывает post_content (с защитой от рекурсии хука). Если правили только стандартный редактор (HTML) -> старый MD удаляется (delete_post_meta), чтобы не перезаписывать новые HTML правки при следующих сохранениях.
1 parent c201740 commit a8c5f1a

1 file changed

Lines changed: 35 additions & 12 deletions

File tree

functions/MarkdownEditor.php

Lines changed: 35 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ public function init(): void {
1616

1717
// Инициализируем хуки
1818
$this->addHook('add_meta_boxes', [$this, 'addMarkdownMetaBox']);
19-
$this->addHook('save_post', [$this, 'saveMarkdownContent'], 10, 2);
19+
$this->addHook('post_updated', [$this, 'saveMarkdownContent'], 10, 3);
2020
$this->addFilter('the_content', [$this, 'renderMarkdownToHtml'], 9);
2121
$this->addHook('admin_enqueue_scripts', [$this, 'enqueueMarkdownAssets']);
2222
$this->addHook('wp_enqueue_scripts', [$this, 'enqueueFrontendAssets']);
@@ -160,9 +160,13 @@ public function renderMarkdownMetaBox($post): void {
160160
}
161161

162162
/**
163-
* Сохраняет Markdown контент
163+
* Сохраняет Markdown контент с умным определением источника изменений
164+
*
165+
* @param int $post_id ID поста
166+
* @param WP_Post $post_after Пост после обновления
167+
* @param WP_Post $post_before Пост до обновления
164168
*/
165-
public function saveMarkdownContent(int $post_id, $post): void {
169+
public function saveMarkdownContent(int $post_id, $post_after, $post_before): void {
166170
// Проверяем, включен ли Markdown
167171
if (!$this->isMarkdownEnabled()) {
168172
return;
@@ -185,29 +189,48 @@ public function saveMarkdownContent(int $post_id, $post): void {
185189

186190
// Проверяем, что это нужный тип поста
187191
$enabled_post_types = $this->getSetting('markdown_post_types', ['post', 'page']);
188-
if (!in_array($post->post_type, $enabled_post_types)) {
192+
if (!in_array($post_after->post_type, $enabled_post_types)) {
193+
return;
194+
}
195+
196+
// Проверяем наличие поля markdown_content в POST
197+
if (!isset($_POST['markdown_content'])) {
189198
return;
190199
}
191200

192-
// Сохраняем Markdown контент
193-
if (isset($_POST['markdown_content'])) {
194-
$markdown_content = wp_unslash($_POST['markdown_content']);
195-
update_post_meta($post_id, '_markdown_content', $markdown_content);
201+
// Получаем новый и старый Markdown контент
202+
$new_markdown = wp_unslash($_POST['markdown_content']);
203+
$old_markdown = get_post_meta($post_id, '_markdown_content', true);
204+
205+
// Определяем, где именно были правки
206+
$markdown_changed = ($new_markdown !== $old_markdown);
207+
$html_changed = ($post_before->post_content !== $post_after->post_content);
208+
209+
if ($markdown_changed) {
210+
// 1. Были правки в Markdown редакторе
211+
// Сохраняем новую версию MD в мета-поле
212+
update_post_meta($post_id, '_markdown_content', $new_markdown);
196213

197214
// Преобразуем Markdown в HTML и сохраняем в post_content
198-
$html_content = $this->parseMarkdown($markdown_content);
215+
$html_content = !empty($new_markdown) ? $this->parseMarkdown($new_markdown) : '';
199216

200-
// Временно отключаем хук, чтобы избежать рекурсии
201-
remove_action('save_post', [$this, 'saveMarkdownContent']);
217+
// Временно отключаем хук во избежание рекурсии
218+
remove_action('post_updated', [$this, 'saveMarkdownContent']);
202219

203220
wp_update_post([
204221
'ID' => $post_id,
205222
'post_content' => $html_content
206223
]);
207224

208225
// Восстанавливаем хук
209-
add_action('save_post', [$this, 'saveMarkdownContent'], 10, 2);
226+
add_action('post_updated', [$this, 'saveMarkdownContent'], 10, 3);
227+
228+
} elseif ($html_changed) {
229+
// 2. В MD правок не было, но HTML был изменен в стандартном редакторе
230+
// Удаляем устаревший Markdown, так как он больше не актуален
231+
delete_post_meta($post_id, '_markdown_content');
210232
}
233+
// 3. Если ничего не изменилось - ничего не делаем
211234
}
212235

213236
/**

0 commit comments

Comments
 (0)