[英]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-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 );
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.