Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Importando contenido directamente en wordpress
#1
Introducción: 

Para los que me conocen, soy un desarrollador web con más de 13 años de experiencia y me dedico al mundo de los sitios webs. Sin embargo yo compito de otra forma, no con blogs sino extrayendo contenido de muchas webs y creando sitios a partir de ese contenido. Por ejemplo: hace 1 año desarrollé una API para Pinterest y gracias a ella pude crear www.pictame.com , un sitio cuyo objetivo es tener las mejores imágenes de internet por categorías. 

[Imagen: MUmVNu2.png]

Todavía no está terminado pero el sitio mediante procesos va todos los días y toma imágenes de Pinterest y las actualiza. Esto no lo ve el usuario, de hecho ni se da cuenta. La idea es tener un sitio que se actualize sin ayuda de un humano sin que yo haga nada o casi-nada. Está montado sobre PHP/LARAVEL 4.0/MYSQL/BASH

Con pictame trato de llenar el hueco de toda la gente buscando "Imágenes de XXX" en google con imágenes de calidad. 

Objetivo 
Sin entrar en más detalles hoy les quería hablar de como construir sitios webs completos importando contenido a wordpress. La idea es que si tu tienes una API(como la que hice para pinterest), una base de datos, un excel, o alguno tipo de formato electrónico puedas crear un sitio de Wordpress importando el contenido.

La ventaja de Wordpress es que una vez que tienes el contenido puedes disponer de una serie de recursos que te hacen la vida fácil:
  • Plugins SEO

  • Temas

  • Manejador de Contenido

  • Cache

  • etc...

Ejemplo: 

Pasemos a la acción. Para importar contenido a un wordpress lo primero que tenemos que hacer es crear un archivo en raiz y poner el siguiente código(asumiendo que WP ya está instalado).


Archivo Adjunto 27712

Yo crearé el archivo /load_content.php
Código PHP:
Código:
<?
include "./wp-load.php";

.....

Con esta instrucción llamamos al core de wodpress y podemos usar sus funciones sin necesidad de programar un plugin, un tema, o insertar código dentro de los archivos de Wordpress. Lo siguiente que debemos hacer es obtener el contenido, para este ejemplo vamos usar la API de The OMDb API v2.1 by Brian Fritz que nos permite obtener información del sitio IMDB.

http://www.omdbapi.com/?s=Star%20Wars&r=json // Para obtener las péliculas con StarWars
http://www.omdbapi.com/?i=tt0076759&r=json // para obtener una película por su ID, en este caso "Star Wars: Episode IV - A New Hope"

El siguiente código obtiene los datos usando JSON.

<?php
Código PHP:
Código:
include "./wp-load.php"; 

$busqueda="Star";
$url_busqueda_api=sprintf("http://www.omdbapi.com/?s=%s&r=json", $busqueda);
//Obtenemos el contenido de la URL con file_get_contents
$output = file_get_contents($url_busqueda_api);
//Convertimos el string obtenido a un objecto por la función json_decode
$objecto_peliculas=json_decode($output);

// Como lo obtenido es un objecto con el "N" número de items según la búsqueda, podemos hacer un for
foreach ($objecto_peliculas->Search as $pelicula) {
        /* 
           Pelicula contiene: 
           Title, Year, imdbID, Type:
         */
        //Como necesitamos la descripción, el poster y más datos hacemos una petición a la API por id de Movie.
        $url_pelicula=sprintf("http://www.omdbapi.com/?i=%s", $pelicula->imdbID);
        $pelicula_details = json_decode( file_get_contents($url_pelicula));

        /*{Codigo para insertar en WP}
          ....
          ....
          .... */

}  

La variable $pelicula_details contiene el detalle de cada película y aquí es donde se pone interesante. Ya que tenemos los datos estructurados en un arreglo podemos empezar a insertar el contenido en WP. Para ello usaremos la función wp_insert_post.

Código PHP:
Código:
        $my_post = array(
                        'post_title'    => $pelicula_details->Title,
                        'post_content'  => $pelicula_details->Plot,
                        'post_status'   => 'publish',
                        'post_author'   => 1,
                        );

        wp_insert_post( $my_post );  

Por cada película encontrada, va añadir un post con el titulo y contenido. Sin embargo tenemos más datos en la API como son poster(imagen) y algunos metadatos como director, actores .. etc que pueden ir como custom fields de wordpress.

Para obtener la imagen y guardarla en nuestro servidor y ponerla como imagen destacada del post.



Código PHP:
Código:
        /* CODIGO PARA INSERTAR LA imagen
        
        */
        //Directorio Raiz donde Guardaremos las imágenes
        $wp_upload_dir = wp_upload_dir();

        $path_img=$wp_upload_dir['path']."/{$id_post}.jpg";

        
        copy($pelicula_details->Poster, $path_img);


        // Checamos el mimetype
        $filetype = wp_check_filetype( basename( $path_img ), null );
        
        // Preparamos el arreglo para insertar la imagen
        $attachment = array(
                        'guid'           => $wp_upload_dir['url'] . '/' . basename( $path_img ), 
                        'post_mime_type' => $filetype['type'],
                        'post_title'     => preg_replace( '/\.[^.]+$/', '', basename( $path_img ) ),
                        'post_content'   => '',
                        'post_status'    => 'inherit'
                        );

        // Insertamos el attachment
        $attach_id = wp_insert_attachment( $attachment, $path_img, $id_post );
        //Añadimos archivo para generar los thumbs
        require_once( ABSPATH . 'wp-admin/includes/image.php' );

        //metadataNecesaria para el atachment 
        $attach_data = wp_generate_attachment_metadata( $attach_id, $filename );
        wp_update_attachment_metadata( $attach_id, $attach_data );

        //Convertimos este attachment en la imagen destacada del Post
        set_post_thumbnail( $id_post, $attach_id );

       /* FIN CODIGO PARA INSERTAR LA imagen */  

Por último si vemos todo lo que nos regresa la API podemos guardar muchos datos como metadatos.

[Imagen: 27719d1401163004-importando-contenido-au....55.54.png]

Solo guardaré director por motivos Didácticos. 
Código PHP:
Código:
add_post_meta($id_post, 'director',$pelicula_details->Director);  

Código Final.
Código PHP:
Código:
<?php

include "./wp-load.php"; 

$busqueda="Star";
$url_busqueda_api=sprintf("http://www.omdbapi.com/?s=%s&r=json", $busqueda);
//Obtenemos el contenido de la URL con file_get_contents
$output = file_get_contents($url_busqueda_api);
//Convertimos el string obtenido a un objecto por la función json_decode
$objecto_peliculas=json_decode($output);

// Como lo obtenido es un objecto con el "N" número de items según la búsqueda, podemos hacer un for
foreach ($objecto_peliculas->Search as $pelicula) {
        /* 
           Pelicula contiene: 
           Title, Year, imdbID, Type:
         */
        //Como necesitamos la descripción, el poster y más datos hacemos una petición a la API por id de Movie.
        $url_pelicula=sprintf("http://www.omdbapi.com/?i=%s", $pelicula->imdbID);
        $pelicula_details = json_decode( file_get_contents($url_pelicula));

        /*{Codigo para insertar en WP} */

        $my_post = array(
                        'post_title'    => $pelicula_details->Title,
                        'post_content'  => $pelicula_details->Plot,
                        'post_status'   => 'publish',
                        'post_author'   => 1,
                        );
        //Insertamos y guardamos el id
        $id_post=wp_insert_post( $my_post );
        


        /* CODIGO PARA INSERTAR LA imagen
        
        */
        //Directorio Raiz donde Guardaremos las imágenes
        $wp_upload_dir = wp_upload_dir();

        $path_img=$wp_upload_dir['path']."/{$id_post}.jpg";

        
        copy($pelicula_details->Poster, $path_img);


        // Checamos el mimetype
        $filetype = wp_check_filetype( basename( $path_img ), null );
        
        // Preparamos el arreglo para insertar la imagen
        $attachment = array(
                        'guid'           => $wp_upload_dir['url'] . '/' . basename( $path_img ), 
                        'post_mime_type' => $filetype['type'],
                        'post_title'     => preg_replace( '/\.[^.]+$/', '', basename( $path_img ) ),
                        'post_content'   => '',
                        'post_status'    => 'inherit'
                        );

        // Insertamos el attachment
        $attach_id = wp_insert_attachment( $attachment, $path_img, $id_post );
        //Añadimos archivo para generar los thumbs
        require_once( ABSPATH . 'wp-admin/includes/image.php' );

        //metadataNecesaria para el atachment 
        $attach_data = wp_generate_attachment_metadata( $attach_id, $filename );
        wp_update_attachment_metadata( $attach_id, $attach_data );

        //Convertimos este attachment en la imagen destacada del Post
        set_post_thumbnail( $id_post, $attach_id );

       /* FIN CODIGO PARA INSERTAR LA imagen */

        add_post_meta($id_post, 'director',$pelicula_details->Director);

}

Una vez que corramos el código podemos ver como se insertaron los Post con todos los datos en Wordpress, la imagen predeterminada automáticamente se ve por el tema e incluso se crearon los thumbs. 

[Imagen: 27720d1401163325-importando-contenido-au....01.43.png]
[Imagen: 27721d1401163438-importando-contenido-au....03.40.png]

Y vemos que funciona, pueden ver el ejemplo aquí: http://michoacano.com.mx/ejemplo10/


Como pueden ver, este es un ejemplo sencillo pero que pueden usar para cualquier cosa. Desde importar sitios completos hasta porciones de contenido a un sitio ya existente. Yo lo he usado para crear páginas de juegos apartir de otras(jeje). Y también se puede usar para crear contenido dinámico todos los días.

Si tienen dudas no duden en dejar comentarios, y si necesitan un trabajo que quieren que realice pueden contactarme en el foro, twitter o por email.
#2
Jajajja, vaya esto es buenísimo. Sirve para trastear y probar que tal, muy bueno he. Lo voy a probar en mi localhost.
I'm back! 


Posibles temas similares...
Tema Autor Respuestas Vistas Último mensaje
Bombilla Temas Wordpress GRATIS calidad PREMIUM nicarao 9 286 03-10-2018, 05:44 PM
Último mensaje: DamianUzcanga
  100 Temas WordPress Gratis 2018 (Parte 5) Sprystate 1 115 07-09-2018, 01:10 PM
Último mensaje: York0x
  100 Temas WordPress Gratis 2018 (Parte 4) Sprystate 0 66 06-09-2018, 10:54 PM
Último mensaje: Sprystate
  100 Temas WordPress Gratis 2018 (Parte 3) Sprystate 0 88 06-09-2018, 10:19 PM
Último mensaje: Sprystate
  100 Temas WordPress Gratis 2018 (Parte 2) Sprystate 1 81 06-09-2018, 10:11 PM
Último mensaje: York0x
  100 Temas WordPress Gratis 2018 (Parte 1) Sprystate 0 95 06-09-2018, 09:29 PM
Último mensaje: Sprystate
  Agregar un anuncio de adsense desde el editor de temas de WordPress cmascreativo.ml 1 75 06-09-2018, 06:20 AM
Último mensaje: jcifuentes
  Top 3 plugins para build wordpress PabloA3 2 90 06-09-2018, 04:37 AM
Último mensaje: jcifuentes
  Mi experiencia con wordpress en producción yuma2009 7 313 03-09-2018, 10:34 PM
Último mensaje: yuma2009
  Como usar el plugin WordPress Popular Posts cmascreativo.ml 1 55 02-09-2018, 08:35 AM
Último mensaje: ReyNexo23



Usuarios navegando en este tema: 1 invitado(s)