WP multisite - создавайте и обновляйте сообщения в сети с одного дочернего сайта - PullRequest
0 голосов
/ 19 мая 2019

У меня установлена ​​Wordpress Multisite. Есть 5 подсайтов. Я хотел бы публиковать и редактировать все сообщения с сайта. 1. Т.е. Я хотел бы опубликовать пост на сайте. 1 и после нажатия кнопки «опубликовать» я хочу опубликовать это сообщение на каждом дочернем сайте моей сети. Я хотел бы также редактировать сообщения на дочернем сайте нет. 1 и после нажатия кнопки обновления я хотел бы, чтобы это сообщение обновлялось во всей моей сети дочерних сайтов.

Мне удалось подготовить сценарий, который позволяет мне создавать новые сообщения на каждом дочернем сайте, но когда я обновляю сообщение, сценарий создает новое сообщение вместо редактирования сообщения, и это главная проблема. Я пробовал другие хуки, такие как «edit_post» или «post_updated», но это не сработало. Я также не могу использовать WP REST API для достижения результата.

Любые идеи кто-нибудь?

Заранее благодарю за любую помощь.

function kush_update_posts_on_subsites( $post_id, $post, $update ) {

    // This function can be called only once - infinite loop secured.
    // @link /4009554/funktsii-kotorye-mozhno-vyzvat-tolko-odin-raz
    static $foo_called = false;
    if ($foo_called) return;
    $foo_called = true;


    // Define post params.
    $id = null; // Post id must be null to create new post. When it's set $post_id it can edit post but it can't create new posts, ie.: $id = $post_id;
    $post_name = $post->post_name;
    $post_title = $post->post_title;
    $post_status = 'publish';
    $post_type = 'kush_link';

    // Get number of all subsites in Multisite Network.
    $blog_count = get_blog_count();

    foreach( get_sites( array( 'number' => $blog_count ) ) as $subsite ) {  

        // Get subsite id.
        $subsite_id = get_object_vars($subsite)["blog_id"];

        // Skipping subsite 1 to avoid creating an empty draft.
        if ($subsite_id == 1) {
            continue;
        }

        // Switch to the appropriate subsite. 
        // @link https://codex.wordpress.org/Function_Reference/switch_to_blog
        switch_to_blog( $subsite_id );

        // Prepare post params.
        // https://developer.wordpress.org/reference/functions/wp_update_post/
        $my_post = array(
            'ID'            => $id,
            'post_name'     => $post_name,
            'post_title'    => $post_title,
            'post_status'   => $post_status,
            'post_type'     => $post_type,
        );

        // Insert the post into the database.
        wp_update_post( $my_post );

        // Return to current subsite ie. subsite = 1.
        restore_current_blog();
    }

}
// @link https://codex.wordpress.org/Plugin_API/Action_Reference/save_post
add_action( 'save_post', 'kush_update_posts_on_subsites', 10, 3 );
...