post_name vacío después de wp_insert_post

2

Estoy escribiendo una herramienta externa que inserta publicaciones en wordpress (estoy usando las funciones de wordpress). También leí esta discusión: wp_insert_post no escribe mi post_name

Pero mi problema es un poco diferente. Yo hago la inserción de post, pero post_name está vacío. El código es:

// Create post object
$my_post = array(
'post_title'    => $article_title,
'post_name'   => $article_title,
'post_content'  => $article_content,
'post_status'   => 'pending',
'post_author'   => 1,
'post_category' => array(8,39)
);

// Insert the post into the database
wp_insert_post( $my_post );

Lo intenté con y sin el post_name, pero el resultado no cambió. También intenté después:

$post_ID = (int) $wpdb->insert_id;
$post_name = wp_unique_post_slug($article_title, $post_ID, $post_status, $post_type, $post_parent);
$where = array( 'ID' => $post_ID );
$wpdb->update( $wpdb->posts, array( 'post_name' => $post_name ), $where );

Pero, por ejemplo, inserte el post_name pero:

  1. no es único
  2. no se desinfecta, por ejemplo, "Prueba" no se convirtió en "prueba"

¿Qué estoy haciendo mal?

    
pregunta user41544 09.11.2013 - 11:48

1 respuesta

6

En primer lugar, no debe usar post_category , porque de acuerdo con el códice de wordpress wp_insert_post () :

  

'post_category' = > [array (, < ... >)] // post_category ya no existe, intente wp_set_post_terms () para configurar las categorías de una publicación

En segundo lugar, si desea que el título de la publicación sea su slug, no debería necesitar usar el parámetro post_name , porque se construye a partir del título de forma predeterminada. Sería recomendable asegurarse de que su título esté libre de etiquetas, cambiando la línea correspondiente a:

'post_title'    => wp_strip_all_tags( $article_title ),

Si realmente desea agregar el parámetro post_name manualmente, asegúrese de sanitize y asegúrese de que singularidad :

'post_name'   => wp_unique_post_slug( sanitize_title( $article_title ) ),

Aparte de los puntos anteriores, su código me parece correcto. La única otra cosa en mente acerca de no obtener un nombre de publicación estaría relacionada con el valor pending para el parámetro post_status que ha elegido, eche un vistazo a código fuente usted mismo. Lo que significa que, si no estoy totalmente equivocado, es que si el estado de la publicación cambia a un estado de publicación, por ejemplo, publicación o privado, se realiza una actualización y luego el nombre de la publicación se inserta en la base de datos. Antes, con estados de publicación de borrador automático, borrador o pendiente, eso no está sucediendo.

    
respondido por el Nicolai 09.11.2013 - 17:27

Lea otras preguntas en las etiquetas