wordpress wp_insert_post y wp_update_post

2 minutos de lectura

me gustaría crear una publicación desde la parte frontal de mi sitio de wordpress.

Cuando las personas agregan publicaciones con el mismo post_title, quiero que esa publicación se actualice, en lugar de crear una nueva publicación.

tengo lo siguiente:

if (!get_page_by_title($post_title, 'OBJECT', 'post') ){
$my_post = array(
   'post_title'    => $post_title,
  'post_content'  => $post_content,
  'post_status'   => 'publish',
  'post_author'   => $post_author,
  'post_category' => $post_categories
);

wp_insert_post( $my_post );

}

else {

$page = get_page_by_title($post_title);
$page_id = $page->ID;

$my_post = array(

   'ID' =>  $page_id,
   'post_title'    => $post_title,
  'post_content'  => $post_content,
  'post_status'   => 'publish',
  'post_author'   => $post_author,
  'post_category' => $post_categories
);

wp_update_post( $my_post );

}

lo anterior funciona bien hasta que el título de la publicación sea el mismo. Todavía se duplicará en la base de datos y ni siquiera considerará la declaración “else”.

¿Se ve bien lo anterior o estoy haciendo algo mal?

avatar de usuario
M Khalid Junaid

¿Qué pasa si usas el empty comprobar la matriz

Tenga en cuenta que obtiene el primer elemento de publicación/página en la base de datos, incluso si la publicación se elimina.

$check_title=get_page_by_title($post_title, 'OBJECT', 'post');

//also var_dump($check_title) for testing only

if (empty($check_title) ){
$my_post = array(
   'post_title'    => $post_title,
  'post_content'  => $post_content,
  'post_status'   => 'publish',
  'post_author'   => $post_author,
  'post_category' => $post_categories
);

wp_insert_post( $my_post );

}

else {


$my_post = array(

   'ID' =>  $check_title->ID,
   'post_title'    => $post_title,
  'post_content'  => $post_content,
  'post_status'   => 'publish',
  'post_author'   => $post_author,
  'post_category' => $post_categories
);

wp_update_post( $my_post );

}

Para Tipo de publicación personalizada, cambie la primera línea a:

$check_title=get_page_by_title($post_title, 'OBJECT', 'my_custom_post_type');

¿Ha sido útil esta solución?