Verifică dacă Titlul Postării există, Inserează postarea dacă nu există, Adaugă Număr Incremental la Meta dacă există
Am deja o funcție unde un utilizator trimite un formular și creează o postare personalizată...
<?php
$postTitle = $_POST['post_title'];
$submit = $_POST['submit'];
if(isset($submit)){
global $user_ID;
// Verifică dacă există deja o postare cu acest titlu
$existing_post = get_page_by_title($postTitle, OBJECT, 'stuff');
if(!$existing_post) {
// Creează postare nouă dacă titlul nu există
$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');
} else {
// Incrementează valoarea meta dacă postarea există
$times = get_post_meta($existing_post->ID, 'times', true);
$times = ($times) ? $times + 1 : 1;
update_post_meta($existing_post->ID, 'times', $times);
}
}
Vreau să verific dacă titlul postării personalizate există, apoi dacă NU există, să creez postarea cu #1 în câmpul meta, iar dacă există deja, să adaug doar 1 la câmpul meta

O metodă mai actualizată poate folosi funcția post_exists()
astfel:
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' );
}

Nu este foarte clar dacă OP dorea să incrementeze câmpul meta cu 1 dacă postarea există, sau pur și simplu să seteze câmpul meta la 1. Codul de mai sus va seta întotdeauna valoarea la 1. Pentru a incrementa, $post_id = post_exists[...]
operatorul ternar ar trebui descompus într-un if / else pentru a incrementa câmpul meta.

Aceasta ar necesita o interogare.
Deci, construind pe codul tău:
<?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');
}
}
Ar trebui să funcționeze

Poți dori să adaugi AND post_status = 'publish'
la interogarea inițială pentru a returna doar postările publicate.

Mulțumesc din nou pentru ajutor! Totuși, postările nu ajung în bază de date din nu știu ce motiv.. nici cele noi, nici cele actualizate.

Este vreo greșeală de scriere pe undeva? Nu reușesc să îmi dau seama.

Eșec epic din partea mea WHERE post_title = %d
ar trebui să fie WHERE post_title = %s
bătându-mă cu capul de birou

Se întâmplă și celor mai buni! Ok, deci noile postări sunt adăugate acum, dar valoarea meta pentru "times" nu se incrementează. În schimb, este creată o nouă valoare meta numită "2". Nici ea nu se auto-incrementează.

Ups, am uitat să actualizez și acea linie. update_post_meta( $post_id, $meta );
ar trebui să fie update_post_meta( $post_id, 'times', $meta );

Puteți utiliza funcția get_page_by_title() din 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');
}

Salut Alex, bine ai venit pe WPSE. Te încurajăm să faci turul. Aici susținem principiul de a-i învăța pe oameni cum să pescuiască, nu doar să le dăm peștele gata. Ai putea, te rog, să editezi postarea ta și să adaugi o explicație despre cum soluția ta rezolvă problema OP-ului?

@Tim Hallman răspuns bun. Folosește funcția post_exists() pentru a verifica dacă postarea există sau nu. Pentru mai multe detalii, vizitează https://developer.wordpress.org/reference/

Puteți face acest lucru după ID
$post_title = "Acest Titlu Minunat";
$post_content = "Conținutul meu despre ceva interesant.";
$post_status = "publish"; //publish, draft, etc
$post_type = "page" // sau orice alt tip de postare dorit
/* Încercare de a găsi ID-ul postării după titlu, dacă există */
$found_post_title = get_page_by_title( $post_title, OBJECT, $post_type );
$found_post_id = $found_post_title->ID;
/**********************************************************
** Verifică dacă pagina nu există, dacă este adevărat, creează o nouă postare
************************************************************/
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(),
/* Dacă aveți câmpuri meta în care să introduceți date */
'meta_input' => array(
'meta_key1' => 'valoarea mea',
'meta_key2' => 'cealaltă valoare a mea',
),
);
/* Adaugă o nouă postare WordPress în baza de date, returnează ID-ul postării */
$returned_post_id = wp_insert_post( $post_args );
/* Actualizează șablonul paginii doar dacă folosiți "page" ca tip de postare */
update_post_meta( $returned_post_id, '_wp_page_template', 'my-page-template.php' );
/* Adaugă valori în câmpurile meta. Funcționează cu CÂMPURI PERSONALIZATE ACF!! */
$field_key = "Cheia_Câmpului_Meu";
$value = "valoarea mea personalizată";
update_field( $field_key, $value, $returned_post_id );
$field_key = "Cheia_Altuia_Câmp_Meu";
$value = "cealaltă valoare personalizată";
update_field( $field_key, $value, $returned_post_id );
/* Salvează o valoare de tip checkbox sau select */
// $field_key = "Cheia_Câmpului_Meu";
// $value = array("roșu", "albastru", "galben");
// update_field( $field_key, $value, $returned_post_id );
/* Salvează o valoare într-un câmp repetitor */
// $field_key = "Cheia_Câmpului_Meu";
// $value = array(
// array(
// "ss_nume" => "Foo",
// "ss_tip" => "Bar"
// )
// );
// update_field( $field_key, $value, $returned_post_id );
/* Afișează un răspuns! */
echo "<span class='pg-new'><strong>". $post_title . " Creat!</strong></span><br>";
echo "<a href='".esc_url( get_permalink($returned_post_id) )."' target='_Blank'>". $post_title . "</a><p>";
else:
/***************************
** DACĂ POSTAREA EXISTĂ, actualizează-o
****************************/
/* Actualizează postarea */
$update_post_args = array(
'ID' => $found_post_id,
'post_title' => $post_title,
'post_content' => $post_content,
);
/* Actualizează postarea în baza de date */
wp_update_post( $update_post_args );
/* Actualizează valorile în câmpurile meta */
$field_key = "Cheia_Câmpului_Meu";
$value = "valoarea mea personalizată";
update_field( $field_key, $value, $found_post_id );
$field_key = "Cheia_Altuia_Câmp_Meu";
$value = "cealaltă valoare personalizată";
update_field( $field_key, $value, $found_post_id );
/* Afișează un răspuns! */
echo "<span class='pg-update'><strong>". $post_title . " Actualizat!</strong></span><br>";
echo "<a href='".esc_url( get_permalink($found_post_id) )."' target='_Blank'>Vezi</a> | <a href='post.php?post=".$found_post_id."&action=edit'>". $post_title . "</a><p>";
endif;

De fapt, este mai sigur să utilizezi cele 2 funcții încorporate în WP care sunt destinate să facă acest lucru, post_exists
și wp_insert_post
, așa cum este în răspunsul lui @TimHallman. Cu cât introduci mai mult cod inutil, cu atât crește șansa de a introduce erori sau probleme de întreținere pe termen lung.

WordPress verifică dacă un articol există după titlu
function wp_exist_post_by_title( $title ) {
global $wpdb;
$return = $wpdb->get_row( "SELECT ID FROM wp_posts WHERE post_title = '" . $title . "' && post_status = 'publish' && post_type = 'post' ", 'ARRAY_N' );
if( empty( $return ) ) {
return false;
} else {
return true;
}
}
// utilizare
if( wp_exist_post_by_title( $post->name ) ) {
// articolul există
} else {
// articolul nu există
}
