Tiempo atrás estuve mezclando ambos mundos con bastante éxito, y tras un pequeño intermedio causado por un cambio en la versión de WordPress, he podido volver a leer la BBDD de WordPress desde yii y os comento como.
Ante todo, establezcamos el objetivo:
La web de RecursosFormacion, en la que estáis, tiene una parte desarrollada sobre el framework yii, que se encarga de la mayor parte de funcionalidades, y aparte, tiene un blog implementado con WordPress.
Ese planteamiento, me permite mezclar lo mejor de ambos mundos; dejo la responsabilidad de toda la estructura blog, con sus artículos, sus comentarios, sus listas,…. a un paquete ampliamente acreditado como es WordPress, y me libero de su rigidez en el resto del desarrollo, permitiéndome incorporar una GUI muy interesante para los libros, una gestión muy sencilla de las utilidades, y mas…
En la primera pagina, se me ocurrió poner una lista de los artículos de WordPress mas leídos, (exactamente, los mas comentados), y me empeñe en que fuera la lógica de WordPress que me facilitara tal información.
La función que me permite hacerlo, sacada de cualquier pagina de Internet es:
function popularPosts($num) {
global $wpdb;
$popular=»»;
$sql=»SELECT comment_count, ID, post_title FROM $wpdb->posts «;
$sql.=»WHERE post_type=’post’ AND post_status = ‘publish'»;
$sql.=» ORDER BY comment_count DESC LIMIT $num «;
$posts = $wpdb->get_results($sql );
$popular = ‘<ul>’;foreach ($posts as $post) {
$id = $post->ID;
$title = $post->post_title;
$count = $post->comment_count;
if ($count != 0) {
$popular .= ‘<li>’;
$popular .= ‘href=»‘ . get_permalink($id) . ‘» title=»‘ . $title . ‘»>’ . $title . ‘ ‘;
$popular .= ‘</li>’;
}
}
$popular .= ‘</ul>’;return $popular;
}
El problema reside en conseguir disponer de los objetos de WordPress como $wpdb conectado a la BBDD correcta,….. y eso se puede lograr anteponiendo a la funcion las siguientes lineas:
require_once (dirname(DOCUMENT_ROOT).DS.’rf_resources’.DS.’rf_config.php’);
spl_autoload_unregister(array(‘YiiBase’, ‘autoload’)); // Disable Yii autoloader
//—–cargando wordpress
define(‘WP_USE_THEMES’, false);
global $wp, $wp_query, $wp_the_query, $wp_rewrite, $wp_did_header;require_once( DOCUMENT_ROOT.’wordpress/wp-load.php’ );
//————-fin de la carga de worpress
spl_autoload_register(array(‘YiiBase’, ‘autoload’)); // Enable Yii autoloader
En la primera linea, cargo un fichero de configuración mio donde tengo los datos de nombre de la BBDD, usuario, y contraseña, y que es el mismo fichero que utiliza la carpeta WORPRESS.
A continuación, desconecto la característica de autoload de Yii para evitar incidencias con wp
En las tres lineas siguientes arranco wordpress, y cargo todas sus variables
Luego solo me queda volver a activar el autoload de Yii para que todo siga funcionando
Todo este código, lo tengo en un fichero del que hago un include, y cuando quiero la lista de artículos, solo tengo que llamar a la función popularPosts($num) indicando el numero de tirulos que quiero
Relacionado
Descubre más desde Recursos para formacion
Suscríbete y recibe las últimas entradas en tu correo electrónico.