繁体   English   中英

使用switch_to_blog的wordpress

[英]wordpress using switch_to_blog

我正在使用wordpress多站点。 我正在创建一个功能,当您在一个站点上发布时,如果需要,它将在另一个博客上发布相同的帖子。

我当前正在使用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陷入了循环并添加了成千上万的帖子!

从上面的代码中为什么会发生这种情况?

这是因为wp_insert_post调用了动作save_post ,从而导致了循环。 您必须删除操作,插入帖子,然后再次添加操作。

如何控制第一次保存的想法来自save_post操作中的Check update for new vs new post 另请参见为什么在创建新帖子时会触发save_post操作? 我添加了对auto-draftinherit的发布状态的检查。

<?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 );
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM