wp_update_post aktualisiert die Kategorie nicht

Ich verwende diese benutzerdefinierte function, um eine Schaltfläche zum Veröffentlichen / Entfernen der Nachricht an das Frontend meiner Site für die Benutzer hinzuzufügen:

if ('draft' == get_post_status ($post_id)) { $post = get_post($post_id,ARRAY_A); $post['post_status'] ='publish'; wp_insert_post($post); } else if ('publish' == get_post_status ($post_id)) { $post = get_post($post_id,ARRAY_A); $post['post_status'] ='draft'; wp_update_post($post); } 

Aber aus irgendeinem Grund ändert sich die Kategorie der Post in die Kategorie der Post, anstatt mit der tatsächlichen Kategorie der Post zu bleiben.

Zum Beispiel habe ich 5 Kategorien mit 1 Elternteil, so:

 ParentCat - ChildCat1 - ChildCat2 - ChildCat3 - ChildCat4 - ChildCat5 

Jeder Beitrag vom Frontend wird in eine der fünf Kategorien eingetragen. Wenn ich auf die Schaltfläche “Veröffentlichen” klicke, die ich erstellt habe, ändert sich die Kategorie in “ParentCat”, anstatt sie als untergeordnete Kategorie beizubehalten.

Weiß jemand wie ich das beheben kann?

Solutions Collecting From Web of "wp_update_post aktualisiert die Kategorie nicht"

Ich habe es herausgefunden! Anscheinend sind Kategorien nicht mehr Teil der databasetabelle für Posts und werden stattdessen an anderer Stelle gespeichert. Daher hat die Verwendung von wp_insert_post keine Möglichkeit, eine Kategorie festzulegen.

Ich musste wp_set_post_terms verwenden, um die Kategorien festzulegen, die beim Veröffentlichen automatisch sowohl das Eltern- als auch das Kind-Element festgelegt haben.

wp_update_post scheint sich nicht mit den Kategorien herumzuschlagen, also müssen sie dort nicht weitergegeben werden.

Hier ist der Teil der jetzt funktionierenden function:

 $category=get_the_category ($post_id); $categories=array ('89', $category[0]->cat_ID); //Publish or unpublish post if ('draft' == get_post_status ($post_id)) { $post = get_post($post_id,ARRAY_A); $post['post_status'] ='publish'; wp_insert_post($post); wp_set_post_terms( $post_id, $categories, 'category' ); } else if ('publish' == get_post_status ($post_id)) { $post = get_post($post_id,ARRAY_A); $post['post_status'] ='draft'; wp_update_post($post); } 

Ich hoffe, das ist hilfreich für jemanden!