Association de données de taxonomie à publier avec wp_insert_post

15

J'essaie d'implémenter un système de comptabilisation frontal qui affiche les données de taxonomie dans plusieurs champs de sélection déroulants. Chacune des listes déroulantes est nommée à l'aide du "nom" $arg dans wp_dropdown_categories() .

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

Comme vous pouvez le constater, 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 suit, ainsi que 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 trop si je fais ce qu'il faut en ajoutant tax_input dans 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 envoyé le nouveau message, toutes les données de message standard (ainsi que mon type de message personnalisé) sont correctes, mais pas les taxonomies. Je fais évidemment quelque chose de mal mais quoi?

    
posée MartinJJ 25.05.2011 - 16:25

3 réponses

23

Utilisez wp_set_object_terms après avoir obtenu 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' );
    
réponse donnée Bainternet 25.05.2011 - 16:34
5

Vous pouvez le faire en utilisant wp_insert_post , mais vous devez également spécifier la taxonomie dans tax_input . comme ceci:

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

J'utilise implode() pour que $location puisse être un tableau contenant 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.

    
réponse donnée Tomáš Kapler 17.09.2012 - 14:00
2

Source du problème

Après quelques recherches sur ce sujet, on m'a demandé de vérifier les éléments 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 sur -1 (au lieu d'ajouter un utilisateur bot). Le problème que j’ai rencontré est que wp_insert_post() avec un tax_input défini vérifie en interne une capacité utilisateur, qu’un utilisateur non existant n’a évidemment pas.

SysBot pour le sauvetage

La solution est alors d'avoir écrit le plug-in SysBot . De cette manière, je pourrais simplement associer l’utilisateur SysBot (qui a le rôle d’éditeur éditeur ) à ce nouveau message et tout a fonctionné comme prévu.

    
réponse donnée kaiser 25.01.2013 - 22:05

Lire d'autres questions sur les étiquettes