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?

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

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.


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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.