it-swarm.com.de

post_name leer nach wp_insert_post

Ich schreibe ein externes Tool, das Post in WordPress einfügt (ich benutze die WordPress-Funktionen). Ich habe auch diese Diskussion gelesen: wp_insert_post schreibt nicht meinen post_name

Aber mein Problem ist ein bisschen anders. Ich füge den Beitrag ein, aber post_name ist leer. Der Code lautet:

// 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 );

Ich habe es mit und ohne post_name versucht, aber das Ergebnis hat sich nicht geändert. Ich habe es auch versucht nach:

$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 );

Geben Sie aber zum Beispiel den post_name ein, aber:

  1. ist nicht einzigartig
  2. nicht desinfizieren, zum Beispiel "Test" wird nicht zu "Test"

Was mache ich falsch?

2
user41544

Erstens solltest du post_category nicht verwenden, da laut dem WordPress-Codex wp_insert_post () :

'post_category' => [array (, <...>)] // post_category existiert nicht mehr, versuche wp_set_post_terms (), um die Kategorien eines Posts festzulegen

Zweitens sollten Sie den Parameter post_name nicht verwenden, wenn der Post-Titel Ihr Slug sein soll, da er standardmäßig aus dem Titel erstellt wird. Stellen Sie sicher, dass Ihr Titel frei von Tags ist, und ändern Sie die entsprechende Zeile in:

'post_title'    => wp_strip_all_tags( $article_title ),

Wenn Sie den Parameter post_name wirklich manuell hinzufügen möchten, stellen Sie sicher, dass Sie bereinigen und Eindeutigkeit sicherstellen:

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

Abgesehen von den obigen Punkten sieht Ihr Code für mich korrekt aus. Das einzige andere, was Sie daran denken, keinen Post-Namen zu erhalten, ist der Wert pending für den von Ihnen gewählten Parameter post_status. Schauen Sie sich den Quellcode an. Das bedeutet - wenn ich mich nicht völlig irre -, dass, wenn sich der Post-Status in einen Veröffentlichungsstatus ändert, beispielsweise "Veröffentlichen" oder "Privat", eine Aktualisierung durchgeführt wird und der Post-Name in die Datenbank eingefügt wird. Vorher - mit Post-Status Auto-Draft, Draft oder Pending - passiert das nicht.

6
Nicolai