Hoy en AyudaWordPress.com | ![]() |
Entradas recientes de toda la red en WordPress multisitio Posted: 28 Nov 2011 02:15 AM PST Si has creado una red con WordPress y los sitios de la misma comparten temática, o simplemente quieres dar reflejo de la actividad de la red en todos los sitios, puedes crear una lista de las entradas más recientes de todos los sitios de la red. Eso si, no hay una función interna en WordPress para hacerlo pero puedes ayudarte de la clase
Pero hay un pero, y es que esta petición SQL es bastante grande, para controlar este comportamiento usaremos la API Transients, de manera parecida a como se usa en la función Lo primero que tenemos que hacer es añadir la función /** * Lista de entradas recientes en toda la red Multisitio * * @uses get_blog_list(), get_blog_permalink() * * @param int $size El número de resultados a obtener * @param int $expires Segundos hasta que expire la cache transient * @return object Contiene el blog_id, post_id, post_date y post_title */ function wp_recent_across_network( $size = 10, $expires = 7200 ) { if( !is_multisite() ) return false; // Se cachean los resultados con la API Transients de WordPress // Obtenemos una copia existente de nuestros datos transient if ( ( $recent_across_network = get_site_transient( 'recent_across_network' ) ) === false ) { // Si no hay transient regeneramos los datos y guardamos una nueva transient // Preparamos la query SQL con $wpdb global $wpdb; $base_prefix = $wpdb->get_blog_prefix(0); $base_prefix = str_replace( '1_', '' , $base_prefix ); // A causa de que la función get_blog_list() está actualmente abandonada // debido al alto consumo de recursos usaremos // $wpdb para ejecutar nuestra query SQL. Como la query puede // consumir mucha memoria almacenaremos los resultados usando la API Transients if ( false === ( $site_list = get_site_transient( 'multisite_site_list' ) ) ) { global $wpdb; $site_list = $wpdb->get_results( $wpdb->prepare('SELECT * FROM wp_blogs ORDER BY blog_id') ); set_site_transient( 'multisite_site_list', $site_list, $expires ); } $limit = absint($size); // Unificamos los resultados de wp_posts en todos los sitios del Multisitio en un solo resultado con MySQL "UNION" foreach ( $site_list as $site ) { if( $site == $site_list[0] ) { $posts_table = $base_prefix . "posts"; } else { $posts_table = $base_prefix . $site->blog_id . "_posts"; } $posts_table = esc_sql( $posts_table ); $blogs_table = esc_sql( $base_prefix . 'blogs' ); $query .= "(SELECT $posts_table.ID, $posts_table.post_title, $posts_table.post_date, $blogs_table.blog_id FROM $posts_table, $blogs_table\n"; $query .= "\tWHERE $posts_table.post_type = 'post'\n"; $query .= "\tAND $posts_table.post_status = 'publish'\n"; $query .= "\tAND $blogs_table.blog_id = {$site->blog_id})\n"; if( $site !== end($site_list) ) $query .= "UNION\n"; else $query .= "ORDER BY post_date DESC LIMIT 0, $limit"; } // Un poco de limpieza y ejecutamos la query $query = $wpdb->prepare($query); $recent_across_network = $wpdb->get_results( $query ); // Ajustamos la cache Transients para que espire cada dos horas set_site_transient( 'recent_across_network', $recent_across_network, 60*60*2 ); } // Damos formato a la salida HTML $html = ' '; foreach ( $recent_across_network as $post ) { $html .= ' ' . $post->post_title . ' '; } $html .= ' '; return $html; } El uso de esta función en tu tema es bien sencillo. Eso si, asegúrate de comprobar el valor Ya solo nos queda añadir el código que recupere los datos de la función en nuestro tema, algo así: <?php // Mostramos las entradas recientes de toda la red $recent_network_posts = wp_recent_across_network(); if( $recent_network_posts ): ?> <?php echo $recent_network_posts; ?> <?php endif; ?> Fuente: Smashing magazine |
Posted: 28 Nov 2011 01:54 AM PST
Esta actualización arregla unos cuantos pequeños fallos, arregla la redirección en la plantilla para los usuarios que estén registrados y algunas cosillas en el recuento y cierre de temas. Como siempre, la actualización se completa en cuestión de segundos y no conlleva problema alguno, después todo sigue funcionando a la perfección. |
You are subscribed to email updates from Ayuda WordPress To stop receiving these emails, you may unsubscribe now. | Email delivery powered by Google |
Google Inc., 20 West Kinzie, Chicago IL USA 60610 |
No hay comentarios:
Publicar un comentario