Pregunta

Me doy cuenta de que ha habido una serie de preguntas, que bailan alrededor de la solución que busco, pero creo que estoy buscando algo específico.

Esto es realmente una pregunta en dos partes:

1) Mi objetivo es tener wordpress operar en modo de red (multi-site) y estoy tratando de averiguar una forma esencialmente a sitios específicos de "grupo" juntos. Soy consciente del plug-in "Multi-red", pero pregunta que si este es el mejor enfoque para esto? La clave aquí es que los usuarios específicos para añadir / editar los sitios dentro de su propio sub-red.

2) Esta es la pregunta clave de este post ... me gustaría saber la mejor manera de que me permitiría esencialmente a la consulta de mensajes dentro de este "sub-red" de sitios. Así, por ejemplo, si hay 10 sitios dentro de este sub-red y cada uno de ellos crean puestos dentro de un tipo de mensaje personalizado llamado "noticias", entonces me gustaría que la capacidad de mostrar, por ejemplo, los 10 mensajes más reciente publicación de esta colección de 10 sitios.

NOTA:. Necesito la capacidad de ser de ser capaz de crear sub-redes se multiplican lo que a medios de giro que una consulta de la última "noticias", publicado sólo puede mostrar los mensajes de los que pertenecen al grupo correcto

Por último - que existen soluciones se dan cuenta para hacer cosas como esta, pero estoy buscando el mejor enfoque en ambos casos que requieren la menor cantidad de bases de datos de carga / consultas. También me gustaría mucho hacer esto a través de código en mi archivo functions.php en lugar de instalar los plugins que crean la hinchazón adicional.

Estoy muy abierto a cualquier sugerencia y apreciar ninguna respuesta.

¿Fue útil?

Solución

Sé que dijo que prefiere no instalar un plug-in, pero eso es exactamente lo que quiere hacer en esta situación. Al colocar el código en el archivo de functions.php de su tema requiere que se use el mismo tema en todos los sitios en la sub-red o mantener múltiples copias del mismo archivo. Por otra parte, se puede crear un simple plug-in para la red para encapsular la funcionalidad, a continuación, activar en la red , e inmediatamente tener la funcionalidad disponible con sólo un archivo de mantener. Esto sería en realidad crear menor hinchazón de depender de sus archivos functions.php.

Lo que hay que tener en cuenta aquí es que usted está bien va a tener que recorrer cada sitio en la red para encontrar sus mensajes o realizar una consulta personalizada. Me gustaría optar por la segunda rutina, ya que, aunque es un poco más complicado, que es una sola consulta en lugar de una consulta diferente para cada blog.

Básicamente ... tendrás que hacer lo siguiente:

  1. Obtener una lista de todos los ID de blogs en la red / subred. Si se utiliza una instalación de vainilla, esto se puede encontrar en el href="http://codex.wordpress.org/Database_Description#Table%3a_wp_blogs"> wp_blogs tabla SELECT sencilla para cargar una matriz, entonces se puede recorrer para agregar cada blog a su consulta principal.
  2. Crea un bucle que se agrega cada blog a una consulta de gran tamaño. Tendrá que ser JOINing mesas y búsqueda basado en blog_id (de wp_blogs), post_id (de wp_BLOG_posts), y la taxonomía personalizada.

Como he dicho, no es una solución simple (la instrucción SQL será muy complicado y no tiene tiempo para cortar a través de él en el momento), pero será una sola declaración que hace todo el trabajo.

Como alternativa ...

  1. Obtener una lista de los ID de blog y la almacena en una matriz.
  2. iterar a través de la matriz de consulta de cada blog en la red y añadiendo sus partidos (mensajes con un cierto plazo taxonomía) a una matriz separada.

Con el método alternativo que tendrá que ejecutar una consulta separada para todos los blogs en la red. Si la red es de 10-20 sitios esto no es demasiado de un problema. Si la red es 200-500 sitios esperan algunos problemas de rendimiento para iniciar apareciendo.

Además, se debe almacenar en caché los resultados de la consulta, si es posible. Si está siendo ejecutado en múltiples cargas de la página (es decir, para una barra lateral Reproductor compartida a través de la red), después, sólo quiere ejecutar la consulta cuando hay nuevos datos a obtener. De lo contrario, servir a los resultados almacenados en caché para que no se reduzca la velocidad de la red.

Otros consejos

He tenido un problema similar. Que necesitaba para obtener una lista de los mensajes en todos los sitios de la red según los comentarios (para mostrar los mensajes más populares). Esta es la función que he usado.

La base es que primero obtiene una lista de todos los identificadores de blogs en la red. A continuación, construye una sola consulta grande (usando UNION para combinar todas las filas y que no requieren fea uniones) que consigue un resultado que contiene las columnas blog_id, ID y COMMENT_COUNT. Usando eso, a continuación, utilizar get_blog_post () para obtener cada uno de los mensajes de información detallada.

Hay algunas líneas de depuración que se pueden utilizar en diferentes puntos para ver lo que está pasando.

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;

}

Es imprescindible disponer de un multisitio plugins de la red. Hay tres para elegir actualmente:. Pagaron dos, uno libre

A partir de ahí, se puede usar algo como las etiquetas de todo el sitio Plugin para posterior extracción para el blog principal de cada red.

Ninguno de estos podría (o debería) hacerse a partir de archivos funciones de un tema.

construir un motor de búsqueda personalizada de Google google.com/cse especificar todos los sitios que desea buscar

incrustarlo en su sitio web

Licenciado bajo: CC-BY-SA con atribución
scroll top