it-swarm.com.de

Anhängen von Taxonomiedaten zum Posten mit wp_insert_post

Ich versuche, ein Front-End-Buchungssystem zu implementieren, das Taxonomiedaten in mehreren Dropdown-Auswahlfeldern anzeigt. Jeder der Dropdowns wird mit dem "Namen" $arg in wp_dropdown_categories() benannt.

wp_dropdown_categories( array(
    'taxonomy'      => 'location',
    'hide_empty'    => 0,
    'orderby'       => 'name',
    'order'         => 'ASC',
    'name'          => 'location',
) );

Wie Sie sehen können, lautet die Taxonomie "Standort" und der ausgewählte Name "Standort".

Ich füge dann die Variablen für jede Taxonomie hinzu und wähle Dropdowns wie folgt zusammen mit post_title, post_content usw. aus:

$title          = trim( $_POST['wpuf_post_title'] );
$content        = trim( $_POST['wpuf_post_content'] );
$tags           = wpuf_clean_tags( $_POST['wpuf_post_tags'] );
$customcategory = trim( $_POST['customcategory'] );
$cat            = trim( $_POST['cat'] );
$location       = trim( $_POST['location'] );
$sale_rental    = trim( $_POST['sale_rental'] );
$price          = trim( $_POST['price'] );

Schließlich füge ich die zusätzlichen Informationen in ein Array ein, das zum Senden durch wp_insert_post() bereit ist. Ich bin ziemlich festgefahren, ob ich das Richtige tue, indem ich tax_input in das Array wie folgt hinzufüge, da dies das ist, was ich aus dem Codex verstehe, das ich tun muss.

'tax-input' => array( 
    $location,
    $sale_rental,
    $price
),

Damit alles so aussieht:

$my_post = array(
    'post_title'    => $title,
    'post_content'  => $content,
    'post_status'   => $post_status,
    'post_author'   => $userdata->ID,
    'post_category' => array( $_POST['cat'] ),
    'post_type'     => $customcategory,
    'tags_input'    => $tags,
    'tax_input'     => array( 
        $location,
        $sale_rental,
        $price
    ),
);

$post_id = wp_insert_post( $my_post );

Wenn ich jedoch den neuen Beitrag abschicke, gehen alle Standardbeitragsdaten (und auch mein benutzerdefinierter Beitragstyp) in Ordnung, die Taxonomien jedoch nicht. Ich mache offensichtlich etwas falsch, aber was?

17
MartinJJ

Verwenden Sie wp_set_object_terms , nachdem Sie die Post-ID für jede Taxonomie haben:

...
$post_id = wp_insert_post( $my_post );
wp_set_object_terms( $post_id, $location, 'location' );
wp_set_object_terms( $post_id, $sale_rental, 'sale_rental' );
wp_set_object_terms( $post_id, $price, 'price' );
24
Bainternet

Sie können dies mit wp_insert_post tun, aber Sie müssen auch die Taxonomie in tax_input angeben, damit es so aussieht:

$item['tax_input'] = array (
    'location'      => implode( ',', $location ),
    'sale_rental'   => implode( ',', $sale_rental ),
    'price'         => implode( ',', $price ),
)

Ich verwende implode() , damit $location ein Array mit mehreren Begriffen sein kann.

Beachten Sie außerdem, dass dies nur für nicht hierarchische Taxonomien funktioniert. Für hierarchische Taxonomien müssen Sie statt astring ein Array angeben.

5
Tomáš Kapler

Quelle des Problems

Nach einigen Recherchen zu diesem Thema wurde mir gesagt, dass ich die Interna überprüfen soll (was ich auch getan habe). Beim Importieren von Beiträgen aus einem externen Feed als benutzerdefinierten Beitragstyp habe ich den Benutzer einfach auf -1 festgelegt (anstatt einen Bot-Benutzer hinzuzufügen). Das Problem, auf das ich gestoßen bin, war, dass wp_insert_post() mit einem tax_input-Satz intern nach einer Benutzerfähigkeit sucht, die ein nicht existierender Benutzer offensichtlich nicht hat.

SysBot für die Rettung

Die Lösung war dann, dass ich das SysBot-Plugin geschrieben habe. Auf diese Weise konnte ich einfach den SysBot-Benutzer (der die Rolle des Editor hat) an diesen neu erstellten Beitrag anhängen und alles funktionierte so, wie es erwartet wurde.

2
kaiser