function __add_global_categories( $term_id )
{
if ( get_current_blog_id() !== BLOG_ID_CURRENT_SITE || ( !$term = get_term( $term_id, 'category' ) ) )
return $term_id; // bail
if ( !$term->parent || ( !$parent = get_term( $term->parent, 'category' ) ) )
$parent = null;
global $wpdb;
$blogs = $wpdb->get_col( "SELECT blog_id FROM {$wpdb->blogs} WHERE site_id = '{$wpdb->siteid}'" );
foreach ( $blogs as $blog ) {
$wpdb->set_blog_id( $blog );
if ( $parent && ( $_parent = get_term_by( 'slug', $parent->slug, 'category' ) ) )
$_parent_ID = $_parent->term_id;
else
$_parent_ID = 0;
wp_insert_term( $term->name, 'category', array(
'slug' => $term->slug,
'parent' => $_parent_ID,
'description' => $term->description
));
}
$wpdb->set_blog_id( BLOG_ID_CURRENT_SITE );
}
add_action( 'created_category', '__add_global_categories' );
Isso será executado sempre que uma categoria for adicionada no site principal. Algumas ressalvas / pontos dignos de menção;
- Se você tem muito blogs, essa função pode ser bastante intensiva.
- Em média, estamos executando entre 5 a 8 consultas (possivelmente mais) por blog - dependendo da velocidade do seu banco de dados, essa função pode precisar ser fragmentada.
- Apenas categorias adicionadas recentemente são "sincronizadas". A atualização e exclusão de categorias não são (o código precisará ser revisado).
- Se uma categoria recém-adicionada tiver um pai e o pai não puder ser encontrado no blog multilíngue em questão, a categoria será criada sem pai (isso só deve acontecer se a categoria pai tiver sido criada antes dessa função ser criada). instalado).