Как публиковать посты по API на несколько удаленных сайтов?
Есть три сайта: главный и два дочерних. Задача% при публикации пота на главном сайте, публиковать их же и на дочерних сайтах. Исследуя документацию и чат GPT, я написал некий код, который выполняет задачу, но на дочернем сайте появляется два одинаковых поста.Прошу помощи найти проблему. Также интересно, есть ли возможность передавать изображения в контенте на дочерний сайт в медиатеку. Сейчас изображение на дочернем сайте ссылается на основной домен. И не передается featured image. Код ниже:
add_action('publish_post', 'sync_to_child_site'); function sync_to_child_site($new_status, $old_status, $post) { if ($new_status === 'publish') { $post_data = get_post($post->ID); $login = 'admin'; $password = '...'; $request = wp_remote_post( 'https://child-domain/wp-json/wp/v2/posts', array( 'headers' => array( 'Authorization' => 'Basic ' . base64_encode("$login:$password") ), 'body' => array( 'title' => $post_data->post_title, 'content' => $post_data->post_content, 'status' => 'publish', ) ) ); } } |
add_action('publish_post', 'sync_to_child_site'); function sync_to_child_site($new_status, $old_status, $post) { if ($new_status === 'publish') { $post_data = get_post($post->ID); $login = 'admin'; $password = '...'; $request = wp_remote_post( 'https://child-domain/wp-json/wp/v2/posts', array( 'headers' => array( 'Authorization' => 'Basic ' . base64_encode("$login:$password") ), 'body' => array( 'title' => $post_data->post_title, 'content' => $post_data->post_content, 'status' => 'publish', ) ) ); } }
Возможно кто-то сталкивался с такими задачами? Прошу подсказать решение или хотя бы направление, куда "копать".
Дополнительно:
Ответы:
Чтобы отслеживать вставку и обновление постов рекомендую
https://developer.wordpress.org/reference/hooks/wp...
А суто правильная - слать пост запрос на апи
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Дубли появляются потому, что хук выбран неправильно и/или функция вызывается несколько раз в процессе публикации. Для синхронизации постов на удалённые WordPress-сайты лучше использовать
transition_post_statusилиsave_postс защитой от повторного запуска, а не слепо отправлять пост при каждом событии.Типовая защита:
add_action('transition_post_status', function ($new_status, $old_status, $post) { if ($post->post_type !== 'post') { return; } if ($new_status !== 'publish' || $old_status === 'publish') { return; } if (get_post_meta($post->ID, '_synced_to_child_sites', true)) { return; } // sync_to_child_sites($post); update_post_meta($post->ID, '_synced_to_child_sites', time()); }, 10, 3);
Так код сработает только при первом переходе в publish, а не при каждом обновлении опубликованной записи.
Для изображений нужно не просто передать HTML с URL старого домена. Нужно скачать медиафайл на дочерний сайт через REST API
/wp/v2/media, получить новый attachment ID и заменить URL в контенте. Featured image задаётся полемfeatured_mediaпри создании поста.Упрощённая логика:
featured_media.Также не храните логин и пароль администратора прямо в коде. Используйте Application Passwords WordPress или отдельного пользователя с минимальными правами. И обязательно логируйте ответы REST API: код ответа, тело ошибки и ID созданного поста. Без логов дубли и падения будет трудно отлаживать.