Insertar páginas, posts o cualquier tipo de contenido (custom post types) directamente a la base de datos (sin utilizar el editor del gestor de WordPress) puede ser muy útil al menos en dos casos: añadir contenido de manera masiva, y añadir contenido desde un formulario de nuestra web (al modo que lo hace el plugin TDO MiniForms).
La función principal en WordPress para añadir contenido a la base de datos es wp_insert_post
. Con ella podemos crear una entrada con todos sus campos (título, contenido, categorías a las que pertenece…). Si queremos asociarle a la entrada campos personalizados usaremos add_post_meta
, y si trabajamos con taxonomías a medida (custom taxonomies) podemos asociarlas con la entrada mediante wp_set_post_terms
.
Con el siguiente código crearíamos el post:
wp_insert_post(array( 'post_type' => 'post', // "page" para páginas, "libro" para el custom post type libro... 'post_status' => 'publish', // "draft" para borrador, "future" para programarlo... 'post_author' => 1, // el ID del autor, 1 para admin 'post_title' => 'Título de la entrada', 'post_content' => 'Lorem ipsum dolor sit amet, consectetur adipiscing elit...', // el contenido 'post_category' => array(ID1,ID2) // matriz de los ID de las categorías a las que asociar la entrada ));
Para asociarle campos personalizados o trabajar con custom taxonomies nos serviremos de la salida de la función wp_insert_post
, que si el contenido se inserta adecuadamente en la base de datos, devuelve el ID del nuevo post creado. Si almacenamos el ID en una variable podemos utilizarlo después en otras funciones:
$post_id = wp_insert_post(array( 'post_type' => 'libro', // "post" para una entrada, "page" para páginas, "libro" para el custom post type libro... 'post_status' => 'publish', // "draft" para borrador, "future" para programarlo... 'post_author' => 1, // el ID del autor, 1 para admin 'post_title' => 'Título de la entrada', 'post_content' => 'Lorem ipsum dolor sit amet, consectetur adipiscing elit...', // el contenido 'post_category' => array(ID1,ID2) // matriz de los ID de las categorías a las que asociar la entrada )); // asociamos la entrada a los términos que queramos de la taxonomía Autor wp_set_post_terms( $post_id, array(ID1,ID2),'autor','True'); // asociamos a la entrada un campo personalizado para el ISBN add_post_meta($post_id, 'ISBN', '978-84-88342-06-5');
9 comentarios
Buenisimo! gracias! me sirvio mucho
en donde inserto este codigo o en que archivo
Hola ade, puedes crear una page template e irsertar el código en ella. A continuación sube la nueva template a la carpeta del theme que estés usando. Luego desde el panel de control de WordPress creas una página y le asignas esa template.
Visita la página para que el código se ejecute. Ten en cuenta que cada vez que visites esa página se ejecutará el código. Por precaución crea la página privada y cuando hayas hecho los inserts, bórrala.
Cada plantilla de wordpress trae su paquete de páginas, pero cada vez que cambio de plantilla no trae las paginas de la nueva si no que muestra las de la plantilla anterior en la sección paginas/todas las paginas, es decir no las actualiza. ¿Que falta para que muestre las nuevas páginas que trae cada tema ?
Hola Camilo,
este artículo habla de un tema diferente al que preguntas.
Las plantillas de página (Page templates) no tienen páginas asociadas. Si por plantilla de WordPress te refieres a theme, no todos los themes de WordPress traen contenido de ejemplo, contenido asociado. Quizás sea esa la razón de que no te aparezca el contenido.
¡Hola!
Gracias por tus post
Tengo una duda:
¿Existe una forma en la que aquí:
‘post_content’ => ‘Lorem ipsum dolor s…’
Pasemos contenido desde variables que obtenemos por $_POST ?
Desde ya, muchas gracias
Hola Luis,
sí, claro. Puedes pasar todas las variables que quieras usando el protocolo POST pero también GET, pasando variables en la URL.
En la página en la que llames a la función
wp_insert_post()
para insertar el contenido puedes recuperar la información usando las variables globales $_GET o $_POST.No te olvides de filtrar las variables para hacer los insert en base de datos de manera segura.
Muchas gracias, lo intentaré. Saludos!
Hola también se puede agregar imagen destacada al post de esta forma ?