Búsquedas globales en WordPress multisitio

Somos Roberto y Francisco, un pequeño equipo dedicado al desarrollo web especializado en las cuestiones técnicas de las plataformas WordPress y WooCommerce. Realizamos consultoría y formación, desarrollamos plugins y temas, optimizamos, securizamos, respondemos a incidentes de seguridad y mantenemos sitios. Fundada en 2012, somos el apoyo técnico de más de un centenar de proyectos web en España y Alemania, además formamos parte activa de la comunidad WordPress.

GranadaiMedia es una red de información relativa a Granada. Su portada es un medio de comunicación al que cinco experimentados periodistas llevan periodicamente información de interés, fresca, y de proximidad. Alrededor de esta portada coexisten una serie de blogs de negocios de cercanía, actividades, información más focalizada en un área, blogs de otros periodistas, etc.

busqueda_global

Necesitaban hacer un poco más visible esta composición en red, pensaron en hacerlo a través de las búsquedas, nos contactaron y se lo hicimos. Desde ahora en las búsquedas ya no aparece solo información del blog que estamos visitando, sino de cualquier blog que exista bajo su red.

Se pueden probar algunas búsquedas como: alcalde, domoelectra, o incluso GIGA4.

Búsqueda de GIGA4 en Granadaimedia

Técnicamente la red Granadaimedia está montada sobre WordPress multisitio. Existen plugins para efectuar estas búsquedas, pero tienen ciertas carencias en cuanto a eficiencia y personalización. Para hacerlo nos apoyamos en este código aportado por Lars Koudal, que hemos retocado para mejorarlo un poco y adaptarlo a sus necesidades.

<?php
$query_string=esc_attr($query_string); // Escaping search queries to eliminate potential MySQL-injections
$blogs = get_blog_list( 0,'all' ); /* DEPRECATED, pero sin sustituto por el momento, Nacin trabaja en ello http://core.trac.wordpress.org/ticket/14511 */
$current_blogid=get_current_blog_id();
$blogs_ordered = array($current_blogid);

foreach ( $blogs as $blog ):
if ($blog['blog_id']!=$blogs_ordered['0']){
$blogs_ordered[]=$blog['blog_id'];
}
endforeach;

foreach ( $blogs_ordered as $blogid ):
switch_to_blog($blogid);
$paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1;

$search = new WP_Query($query_string.'&posts_per_page=15&paged='.$paged); if ($search->found_posts>0) {
?>
<h2 class="search-blog-name"><a href="<?php echo home_url('/'); ?>" alt="<?php echo bloginfo( 'name' ); ?>"><?php echo bloginfo( 'name' ); ?></a></h2>
<?php
foreach ( $search->posts as $post ) {
setup_postdata($post);
?>
<div class="clearfix">
<div class="news <?php echo has_post_thumbnail() ? 'w_image' : ''; ?>">
<div class="wrap-title wrap-title-<?php echo get_category_parent_id(); ?>">
<h3 class="title" id="title-<?php the_ID(); ?>">
<a href="<?php the_permalink() ?>" title="Enlace a <?php the_title_attribute(); ?>"><?php the_title(); ?></a>
</h3>

</div>

<div class="entry">
<?php echo apply_filters( 'the_content', get_the_excerpt()); ?>
</div>

</div>
<?php if ( has_post_thumbnail() ) : ?>
<a class="clearfix news-image" href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>"> <?php the_post_thumbnail('medium'); ?> </a>
<?php endif; ?>
</div>
<?php
}

                        $page_links_total =  $search->max_num_pages;
       if ($page_links_total>1) :
       ?>

       <div id="pagination" class="clearfix">
<?php
echo paginate_links( array(
           'base' => add_query_arg( 'paged', '%#%' ),
           'format' => '',
'end_size' => 7,
'mid_size' => 0,

'prev_next' => 1,
           'prev_text' =>'Anterior',
           'next_text' => 'Siguiente',
           'total' => $page_links_total,
           'current' => $paged
       ));
?>
</div>
       <?php endif; 

}
endforeach;

switch_to_blog($current_blogid);
?>

De este modo siempre aparecen primero los resultados del blog en el que estamos, y luego aparecen los resultados de los demás blogs. Siempre vienen precedidos de un título grande que muestra el blog en el que se encuentran los resultados, en Granadaimedia esto se remarca mediante separadores más anchos o más estrechos.

Avisos: No es un código preparado para entornos que precisen alta eficiencia, puede ser mejorado para redes de blogs grandes / La paginación no es perfecta / La función get_blog_list() está marcada como deprecated y no debería ser usada, si bien sigue en el core, no existe aún una alternativa y se puede usar si sabemos lo que estamos haciendo, es un trabajo aún en proceso.

Un comentario en “Búsquedas globales en WordPress multisitio

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *