¿Consulta publicaciones de múltiples sitios en una red?

8

Me doy cuenta de que ha habido algunas preguntas sobre la solución que busco, pero creo que estoy buscando algo específico.

Esta es en realidad una pregunta de dos partes:

1) Mi objetivo es hacer que WordPress funcione en modo de red (multi-sitio) y estoy tratando de encontrar una manera de "agrupar" sitios específicos. Soy consciente del complemento "Multi-Network" pero me pregunto si este es el mejor enfoque para esto. La clave aquí es permitir que usuarios específicos agreguen / editen los sitios dentro de su propia subred.

2) Esta es la pregunta clave de esta publicación ... Me gustaría saber cuál es el mejor enfoque que me permitiría consultar esencialmente publicaciones desde esta "subred" de sitios. Entonces, por ejemplo, si hay 10 sitios dentro de esta subred y cada uno de ellos creó publicaciones dentro de un tipo de publicación personalizada llamada "noticias", me gustaría poder mostrar, por ejemplo, las 10 publicaciones publicadas más recientemente de esta colección de 10 sitios.

NOTA: Necesito la capacidad de poder crear múltiples subredes, lo que a su vez significa que una consulta de las últimas "noticias" publicadas solo puede mostrar publicaciones de aquellos que pertenecen al grupo correcto.

Finalmente, me doy cuenta de que existen soluciones para hacer cosas como esta, pero estoy buscando el mejor enfoque en ambos casos que requiera la MENOR cantidad de carga / consultas de la base de datos. También me gustaría mucho hacer esto a través del código en mi archivo functions.php en lugar de instalar complementos que crean hinchazón adicional.

Estoy muy abierto a cualquier sugerencia y agradezco cualquier respuesta.

NetConstructor.com
fuente

Respuestas:

7

Sé que dijiste que preferirías no instalar un complemento, pero eso es exactamente lo que quieres hacer en esta situación. Colocar el código en el functions.phparchivo de su tema requiere que use el mismo tema en todos los sitios de la subred o que mantenga varias copias del mismo archivo. Por otro lado, puede crear un complemento simple para la red para encapsular la funcionalidad, luego activarlo en la red e inmediatamente tener la funcionalidad disponible con solo un archivo para mantener. Esto realmente crearía menos hinchazón que dependiendo de sus functions.phparchivos.

Lo que debe tener en cuenta aquí es que tendrá que recorrer cada sitio de la red para encontrar sus publicaciones o realizar una consulta personalizada. Optaría por la segunda rutina porque, aunque es un poco más complicado, es una consulta única en lugar de una consulta diferente para cada blog.

Básicamente ... deberás hacer lo siguiente:

  1. Obtenga una lista de todas las ID de blog en la red / subred. Si utiliza una instalación de vainilla, esto se puede encontrar en la wp_blogstabla. Simplemente haga una SELECTconsulta simple para cargar una matriz, luego puede recorrer para agregar cada blog a su consulta principal.
  2. Cree un bucle que agregue cada blog a una consulta grande. Tendrá que JOINjuntar tablas y buscar según blog_id(desde wp_blogs), post_id(desde wp_BLOG_posts) y la taxonomía personalizada.

Como dije, no es una solución simple (la declaración SQL será muy complicada y no tengo tiempo para hackearla en este momento), pero será una declaración única que hará todo el trabajo.

Alternativamente ...

  1. Obtenga una lista de los ID de blog y guárdela en una matriz.
  2. Itere a través de su matriz consultando cada blog en la red y agregando sus coincidencias (publicaciones con un cierto término de taxonomía) a una matriz separada.

Con el método alternativo, deberá ejecutar una consulta por separado para cada blog de la red. Si su red es de 10-20 sitios, esto no es un gran problema. Si su red tiene 200-500 sitios, espere que surjan algunos problemas de rendimiento.

Además, debe almacenar en caché los resultados de su consulta si es posible. Si se está ejecutando en varias cargas de página (es decir, para un widget de barra lateral compartido en la red), entonces solo desea ejecutar la consulta cuando haya nuevos datos para obtener. De lo contrario, sirva los resultados almacenados en caché para no ralentizar la red.

EAMann
fuente
Gracias por su respuesta. Me gusta su idea de hacerlo a través de una consulta SQL personalizada, ya que supongo que esto crearía menos carga. Lo que espero es que pueda mostrarme qué complementos usaría para crear estas subredes que pueden tener sitios asociados con ellos y, con suerte, cuando tenga tiempo la consulta SQL que tendría que usar para consultar automáticamente todas las publicaciones dentro de que los sitios asignados a la subred. Le agradezco mucho su tiempo
NetConstructor.com
3
Si es posible, actualice
NetConstructor.com
1

Tuve un problema similar. Necesitaba obtener una lista de publicaciones en todos los sitios de la red ordenada por comentarios (para mostrar las publicaciones más populares). Esta es la función que usé.

La base es que primero obtiene una lista de todos los identificadores de blog en su red. Luego construye una gran consulta única (usando UNION para combinar todas las filas y no requiere uniones feas) que obtiene un resultado que contiene las columnas blog_id, ID y comment_count. Usando eso, luego uso get_blog_post () para obtener información detallada de cada una de las publicaciones.

Hay algunas líneas de depuración que puede usar en diferentes puntos para ver qué sucede.

function txx_top_posts_mu( $howMany = 10 ) {
global $wpdb;
global $table_prefix;

// get an array of the table names that our posts will be in
// we do this by first getting all of our blog ids and then forming the name of the 
// table and putting it into an array
$rows = $wpdb->get_results( "SELECT blog_id from $wpdb->blogs WHERE
    public = '1' AND archived = '0' AND mature = '0' AND spam = '0' AND deleted = '0';" );
if ( $rows ) :
    $blogPostTableNames = array();
    foreach ( $rows as $row ) :
        $blogPostTableNames[$row->blog_id] = $wpdb->get_blog_prefix( $row->blog_id ) . 'posts';
    endforeach;
    //print_r($blogPostTableNames);

    // now we need to do a query to get all the posts from all our blogs
    // ordered by the number of comments and with limits applied
    if ( count( $blogPostTableNames ) > 0 ) :
        $query = '';
        $i = 0;
        foreach ( $blogPostTableNames as $blogId => $tableName ) :
            if ( $i > 0 ) :
                $query.= ' UNION ';
            endif;
            $query.= " SELECT ID, comment_count, $blogId as `blog_id` FROM $tableName ";
            $i++;
        endforeach;
        $query.= " ORDER BY comment_count DESC LIMIT 0,$howMany;";
        //echo $query;
        $rows = $wpdb->get_results( $query );

        // now we need to get each of our posts into an array and return them
        if ( $rows ) :
            $posts = array();
            foreach ( $rows as $row ) :
                $posts[] = get_blog_post( $row->blog_id, $row->ID );
            endforeach;
            //print_r($posts);
            return $posts;
        endif;
    endif;
endif;
return false;

}


fuente
-1

Definitivamente necesita un complemento de red multisitio. Hay tres para elegir actualmente: dos pagados, uno gratis.

A partir de ahí, puede usar algo como el complemento de etiquetas de todo el sitio para obtener publicaciones en el blog principal de cada red.

Ninguno de estos podría (o debería) hacerse desde el archivo de funciones de un tema.

andrea_r
fuente
¿Cuáles son los pagos a los que te refieres?
NetConstructor.com
1
y pagado: (mío) wpebooks.com/networks
andrea_r
-3

cree un motor de búsqueda de google personalizado google.com/cse especifique todos los sitios que desea buscar

incrustarlo en su sitio web

mireille raad
fuente
@mirelle, pero definitivamente no es la respuesta que estaba buscando
NetConstructor.com