A veces tenemos que hacer ciertas tareas que nos obligan a crear posts mediante código y no con el admisnitrador: volcados de datos, crons, plugins extraños…
Para eso podemos hacer uso de la función: wp_insert_post();
Simplemente hay que definir el array asociativo que contendrá el post y luego lanzar la función.
Seguidamente una mini-referencia de que indices podemos declarar en el array:
$post = array(
// Básicos
'post_status' => [ 'draft' | 'publish' | 'pending' ] // Cuidado, por defecto se publican como 'Draft' asi que conviene declararlo.
'post_title' => [ ] // El título del post.
'post_excerpt' => [ ] // Extracto
'post_content' => [ ] // HTML del post que estamos creando.
'post_author' => [ ] // Id del autor
'post_category' => [ array(, <...>) ] // Ids de las categorias
'tags_input' => [ ', , <...>' ] // indicando los tags
// Para páginas
'post_type' => [ 'post' | 'page' ] // Es un post o una página? (por defecto 'post')
'page_template' => [ ] // Si la página usa un template propio lo podemos indicar.
'menu_order' => [ ] // Para páginas. Indicar el número de página.
// Otras opciones
'post_parent' => [ ] // Si es un post hijo, declaramos el id del padre
'comment_status' => [ 'closed' | 'open' ] // Si lo cerramos no admitiremos comentarios
'ID' => [ ] // por si lo que estamos haciendo es en realidad un update (aunque para eso hay otra función)
'post_date' => [ Y-m-d H:i:s ] // DateTime de creación (por defecto la actual)
'post_date_gmt' => [ Y-m-d H:i:s ] // DateTime en GMT.
);
wp_insert_post($post);
- Más info: wp_insert_post()
3 respuestas a “Programar la creación de Posts en WordPress”
Hola IK
Tengo una duda con respecto al item ‘post_content’ en cual quiero colocar todo un codigo html de tablas anidadas, el tema es que con la funcion wp_insert_post() no me crea el post, y en cambio si uso el administrador de wordpress para crear post no me genera ningun problema a la hora de crear las tablas anidadas.
Como veras si recurro a esta consulta es porque le he dado mil vueltas y no encuentro la solucion.
Saludos y muchas gracias por tus post, me han sido de mucha utilidad.
Buenas carlos,
Lo que hace un tiempo funcionaba puede que ahora no funcione exactamente igual. Hace mucho que no uso esa funcion con lo cual echarle un ojo a la documentación de wordpress para ver si todas las variables siguen funcionando igual y de paso mirar si no hay alguna nueva obligatoria no estaría mal:
http://codex.wordpress.org/Function_Reference/wp_insert_post
Lo que comentas es raro… si no entiendo mal, la publicación te la está haciendo pero te esta modificando post_content y le está añadiendo quitando el codigo html de
etc?
Te diría que revisases si es eso, probando otros htmls a ver que sudece.
Comentarte que los posts en wordpress no son exactametne html sino mezcla de html y texto ya que worpdress utiliza su función wpautop() para mostrar los posts (una funcion que basicamente transforma enters en
y 2 enters segidos en «
«, pero puede que haga algo más. Así pues, para poder hacer hacer un codigo html propio deberías hacerlo evitando siempre los enters.
Mira como se guarda en la base de datos tu insert no vaya a ser que sea luego la funcion wpautop() la que te rompa esas tablas. De la misma forma observa…
Hola IK
Estuve probando lo que me decis, evitando y no los enters con tablas simples y anidadas pero todas vacias y resulto que me las guardaba.
Entonces llegue a la conclusion de que el problema se me daba cuando las tablas tenian estilos y demas etiquetas html con estilos css.
La solucion era bien simple, solo tenia que usar la funcion utf8_encode($html_tabla) y eso era todo.
Aca dejo un ejemplo de mi solucion:
$contenido = ‘
….
‘;
$post = array(
‘post_status’ => ‘publish’,
‘post_title’ => ‘Titulo de mi Post’,
‘post_content’ => utf8_encode($contenido),
‘post_author’ => 1,
‘post_type’ => ‘post’,
‘comment_status’ => ‘closed’,
);
Bueno espero les sea de utilidad a los que pasen por aca.
Mis saludos y agradecimientos a vos Ik por este espacio, tiempo y conocimientos compratidos.
Saludos!!.