categories – WordPress Multisite – categorías globales

Pregunta:

Configuración de una instancia de WP multisitio: el cliente tiene una ontología / conjunto de categorías existente que desea clasificar todo el contenido en el conjunto de blogs. También se desea que las nuevas categorías se agreguen en el nivel de 'blog de la red' y se sincronice con los otros blogs.

¿Cuál es la mejor forma de hacer esto?

Respuesta:

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' );

Esto se ejecutará siempre que se agregue una categoría en el sitio principal. Algunas advertencias / puntos que vale la pena mencionar;

  • Si tiene muchos blogs, esta función puede volverse bastante intensiva.
  • En promedio, estamos ejecutando entre 5 y 8 consultas (posiblemente más) por blog ; dependiendo de la velocidad de su base de datos, es posible que esta función deba fragmentarse.
  • Solo se 'sincronizan' las categorías recién agregadas. La actualización y eliminación de categorías no lo son (el código deberá revisarse).
  • Si una categoría recién agregada tiene un padre, y el padre no se puede encontrar dentro del blog multisitio en cuestión, la categoría se creará sin un padre (este solo debería ser el caso si la categoría principal se creó antes de instalar esta función).

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım