Joindre des données de taxonomie à publier avec wp_insert_post


17

J'essaie de mettre en œuvre un système d'affichage frontal qui affiche les données de taxonomie dans plusieurs champs de sélection déroulants. Chacune des listes déroulantes est nommée en utilisant le "nom" $argdans wp_dropdown_categories().

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

Comme vous pouvez le voir, la taxonomie est "emplacement" et le nom sélectionné est également "emplacement".

J'ajoute ensuite les variables pour chacune des listes déroulantes de sélection de taxonomie comme ceci avec post_title, post_content etc:

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

Enfin, j'ajoute les informations supplémentaires dans un tableau prêt à être envoyé par wp_insert_post(). Je ne sais pas si je fais la bonne chose en ajoutant tax_inputdans le tableau comme ci-dessous car c'est ce que je comprends du codex que je dois faire.

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

Pour que tout finisse par ressembler à ceci:

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

Cependant, lorsque j'ai soumis le nouveau message, toutes les données standard du message (et aussi mon type de message personnalisé) vont bien, mais les taxonomies ne le font pas. Je fais évidemment quelque chose de mal mais quoi?

Réponses:


25

À utiliser wp_set_object_termsaprès avoir identifié l'ID de publication pour chaque taxonomie:

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

Je ne sais pas où je serais sans votre aide, j'ai travaillé pour la première fois ... merci beaucoup Bainternet. Marqué comme ayant répondu
MartinJJ

Heureux d'avoir pu aider :)
Bainternet

Les tableaux $ location et $ sale_rental sont-ils des entiers ou des chaînes?
Doug

5

Vous pouvez le faire en utilisant wp_insert_post , mais vous devez également spécifier la taxonomie tax_input, donc cela devrait ressembler à ceci:

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

j'utilise implode() donc cela $locationpourrait être un tableau avec plusieurs termes.

Notez également que cela ne fonctionne que pour les taxonomies non hiérarchiques. Pour les taxonomies hiérarchiques, vous devez fournir un tableau au lieu de astring.


2

Source du problème

Après quelques recherches sur ce sujet, on m'a dit de vérifier les internes (ce que j'ai fait). Comme j'importais des publications à partir d'un flux externe en tant que type de publication personnalisé, j'ai simplement défini l'utilisateur -1(au lieu d'ajouter un utilisateur de bot). Le problème que j'ai rencontré était wp_insert_post()qu'avec untax_input ensemble, vérifie en interne la capacité d'un utilisateur, ce qu'un utilisateur non existant n'a évidemment pas.

SysBot pour le sauvetage

La solution était alors d'écrire le plugin SysBot . De cette façon, je pouvais simplement attacher l'utilisateur SysBot (qui a le rôle d' éditeur ) à ce message nouvellement créé et tout fonctionnait comme prévu.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.