2013-07-12 3 views
0

Я использую wordpress multisite. Я создаю функцию, которая, когда вы публикуете на одном сайте, будет размещать одну и ту же запись в другом блоге, если потребуется.wordpress using switch_to_blog

я в настоящее время с помощью switch_to_blog(), вот мой код:

switch_to_blog(2); 

$my_post = array(
    'post_title' => $post_title, 
    'post_content' => $post_content, 
    'post_status' => 'publish', 
    'post_author' => $post_author, 
    //'post_category' => array(8,39) 
); 

// Insert the post into the database 
wp_insert_post($my_post); 

restore_current_blog(); 

выше побежал на save_post действия. он отлично работает и публикует сообщения в обоих блогах. Единственная проблема в блоге, я переключаюсь на wp_insert_post, застревает в цикле и добавляет тысячи сообщений!

Любая причина, почему это произойдет из приведенного выше кода?

+0

Где находится этот код? Какой файл и какой крючок? – brasofilo

ответ

0

Это потому, что wp_insert_post вызывает действие save_post, отсюда цикл. Вам нужно удалить действие, вставить сообщение и снова добавить действие.

Идея о том, как управлять первым сохранением, составляет от Check for update vs new post on save_post action. Также см. Why does save_post action fire when creating a new post?. Я добавил проверку статусов сообщений auto-draft и inherit.

<?php 
/* Plugin Name: Publish to Network */ 

add_action('save_post', 'cross_publish_so_17611289', 10, 2); 

function cross_publish_so_17611289($post_id, $post_object) 
{ 
    if(defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) 
     return; 

    if(defined('DOING_AJAX') && DOING_AJAX) 
     return; 

    # Block auto-drafts and revisions 
    if(in_array($post_object->post_status, array('auto-draft', 'inherit'))) 
     return; 

    $termid = get_post_meta($post_id, '_termid', true); 

    # It's a new post 
    if(empty($termid)) 
    { 
     update_post_meta($post_id, '_termid', 'update'); 
     remove_action('save_post', 'cross_publish_so_17611289'); 
     switch_to_blog(2); 
     $my_post = array(
      'post_title' => $post_object->post_title, 
      'post_content' => $post_object->post_content, 
      'post_status' => 'publish', 
      'post_author' => $post_object->post_author, 
     ); 
     wp_insert_post($my_post); 
     restore_current_blog(); 
     add_action('save_post', 'cross_publish_so_17611289', 10, 2); 
    } 
} 
Смежные вопросы