Anhängen von Taxonomiedaten zum Posten mit wp_insert_post

17

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

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 bereit ist wp_insert_post(). Ich bin ziemlich festgefahren, ob ich das Richtige tue, indem ich tax_inputdas Array wie unten 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?

MartinJJ
quelle

Antworten:

25

Verwenden wp_set_object_termsSie diese Option, nachdem Sie die Beitrags-ID für jede Taxonomie angegeben 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' );
Bainternet
quelle
Ich weiß nur nicht, wo ich ohne deine Hilfe wäre, habe das erste Mal gearbeitet ... vielen Dank Bainternet. Als beantwortet markiert
MartinJJ
Froh, dass ich helfen konnte :)
Bainternet
Sind $ location und $ sale_rental Arrays von ganzen Zahlen oder Zeichenketten?
Doug
5

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

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

Ich benutze implode()also das $locationkönnte ein Array mit mehreren Begriffen sein.

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.

Tomáš Kapler
quelle
2

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 festgelegt -1(anstatt einen Bot-Benutzer hinzuzufügen). Das Problem, auf das ich stieß, war, dass wp_insert_post()mit einem tax_inputSet intern nach einer Benutzerfähigkeit gesucht wurde, 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 Editors hat ) an diesen neu erstellten Beitrag anhängen und alles funktionierte so, wie es erwartet wurde.

Kaiser
quelle