J'ai déjà une fonction dans laquelle un utilisateur soumet un formulaire et crée un message personnalisé ...
<?php $postTitle = $_POST['post_title'];
$submit = $_POST['submit'];
if(isset($submit)){
global $user_ID;
$new_post = array(
'post_title' => $postTitle,
'post_content' => '',
'post_status' => 'publish',
'post_date' => date('Y-m-d H:i:s'),
'post_author' => '',
'post_type' => 'stuff',
'post_category' => array(0)
);
$post_id = wp_insert_post($new_post);
add_post_meta($post_id, 'times', '1');
}
Je souhaite vérifier si le titre de publication personnalisée existe. Dans le cas contraire, créez la publication avec un n ° 1 dans le champ méta et, dans le cas contraire, ajoutez simplement 1 au champ méta.
Cela aurait besoin d'une requête.
Alors construisant sur votre code:
<?php
$postTitle = $_POST['post_title'];
$submit = $_POST['submit'];
if(isset($submit)){
global $user_ID, $wpdb;
$query = $wpdb->prepare(
'SELECT ID FROM ' . $wpdb->posts . '
WHERE post_title = %s
AND post_type = \'stuff\'',
$postTitle
);
$wpdb->query( $query );
if ( $wpdb->num_rows ) {
$post_id = $wpdb->get_var( $query );
$meta = get_post_meta( $post_id, 'times', TRUE );
$meta++;
update_post_meta( $post_id, 'times', $meta );
} else {
$new_post = array(
'post_title' => $postTitle,
'post_content' => '',
'post_status' => 'publish',
'post_date' => date('Y-m-d H:i:s'),
'post_author' => '',
'post_type' => 'stuff',
'post_category' => array(0)
);
$post_id = wp_insert_post($new_post);
add_post_meta($post_id, 'times', '1');
}
}
Devrait le faire
Une méthode plus mise à jour peut utiliser la fonction post_exists()
de la manière suivante:
if( isset( $_POST['submit'] ) ){
$post_title = sanitize_title( $_POST['post_title'] );
$new_post = array(
'post_title' => $post_title,
'post_content' => '',
'post_status' => 'publish',
'post_date' => date('Y-m-d H:i:s'),
'post_author' => '',
'post_type' => 'stuff',
'post_category' => array(0)
);
$post_id = post_exists( $post_title ) or wp_insert_post( $new_post );
update_post_meta( $post_id, 'times', '1' );
}
@ Tim Hallman Belle réponse. Utilisez la fonction post_exists () pour vérifier si post existe ou non. Plus de détails visitez https://developer.wordpress.org/reference/
Vous pouvez utiliser la fonction get_page_by_title () de WordPress:
<?php $postTitle = $_POST['post_title'];
$submit = $_POST['submit'];
if(isset($submit)){
$customPost = get_page_by_title($postTitle, OBJECT, 'stuff');
if(!is_null($customPost)) {
$meta = get_post_meta($customPost->ID, 'times', true);
$meta++;
update_post_meta($customPost->ID, 'times', $meta);
return
}
global $user_ID;
$new_post = array(
'post_title' => $postTitle,
'post_content' => '',
'post_status' => 'publish',
'post_date' => date('Y-m-d H:i:s'),
'post_author' => '',
'post_type' => 'stuff',
'post_category' => array(0)
);
$post_id = wp_insert_post($new_post);
add_post_meta($post_id, 'times', '1');
}
Vous pouvez le faire par ID
$post_title = "This Awesome Title";
$post_content = "My content of something cool.";
$post_status = "publish"; //publish, draft, etc
$post_type = "page" // or whatever post type desired
/* Attempt to find post id by post name if it exists */
$found_post_title = get_page_by_title( $post_title, OBJECT, $post_type );
$found_post_id = $found_post_title->ID;
/**********************************************************
** Check If Page does not exist, if true, create a new post
************************************************************/
if ( FALSE === get_post_status( $found_post_id ) ):
$post_args = array(
'post_title' => $post_title,
'post_type' => $post_type,
'post_content'=> $post_content,
'post_status' => $post_status,
//'post_author' => get_current_user_id(),
/* If you have meta fields to enter data into */
'meta_input' => array(
'meta_key1' => 'my value',
'meta_key2' => 'my other value',
),
);
/* Add a new wp post into db, return it's post id */
$returned_post_id = wp_insert_post( $post_args );
/* Update page template only if using "page" as the post_type */
update_post_meta( $returned_post_id, '_wp_page_template', 'my-page-template.php' );
/* Add values into meta fields. Work with ACF CUSTOM FIELDS!! */
$field_key = "My_Field_KEY";
$value = "my custom value";
update_field( $field_key, $value, $returned_post_id );
$field_key = "My_Other_Field_KEY";
$value = "my other custom value";
update_field( $field_key, $value, $returned_post_id );
/* Save a checkbox or select value */
// $field_key = "My_Field_KEY";
// $value = array("red", "blue", "yellow");
// update_field( $field_key, $value, $returned_post_id );
/* Save to a repeater field value */
// $field_key = "My_Field_KEY";
// $value = array(
// array(
// "ss_name" => "Foo",
// "ss_type" => "Bar"
// )
// );
// update_field( $field_key, $value, $returned_post_id );
/* Echo a response! */
echo "<span class='pg-new'><strong>". $post_title . " Created!</strong></span><br>";
echo "<a href='".esc_url( get_permalink($returned_post_id) )."' target='_Blank'>". $post_title . "</a><p>";
else:
/***************************
** IF POST EXISTS, update it
****************************/
/* Update post */
$update_post_args = array(
'ID' => $found_post_id,
'post_title' => $post_title,
'post_content' => $post_content,
);
/* Update the post into the database */
wp_update_post( $update_post_args );
/* Update values into meta fields */
$field_key = "My_Field_KEY";
$value = "my custom value";
update_field( $field_key, $value, $found_post_id );
$field_key = "My_Other_Field_KEY";
$value = "my other custom value";
update_field( $field_key, $value, $found_post_id );
/* Echo a response! */
echo "<span class='pg-update'><strong>". $post_title . " Updated!</strong></span><br>";
echo "<a href='".esc_url( get_permalink($found_post_id) )."' target='_Blank'>View</a> | <a href='post.php?post=".$found_post_id."&action=edit'>". $post_title . "</a><p>";
endif;