Adjuntar datos de taxonomía para publicar con wp_insert_post

15

Estoy intentando implementar un sistema de publicación de front-end que muestra datos de taxonomía en varios campos de selección desplegables. Cada uno de los menús desplegables se nombra utilizando el "nombre" $arg en wp_dropdown_categories() .

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

Como puede ver, la taxonomía es "ubicación" y el nombre seleccionado también es "ubicación".

Luego agrego las variables para cada uno de los menús desplegables de selección de taxonomía, como así, junto con 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'] );

Finalmente, agrego la información adicional a una matriz lista para ser enviada por wp_insert_post() . Estoy bastante atascado con respecto a si estoy haciendo lo correcto al agregar tax_input a la matriz como se muestra a continuación, ya que esto es lo que entiendo del códice que debo hacer.

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

Para que todo se vea así:

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

Sin embargo, cuando envié la nueva publicación, todos los datos de publicación estándar (y también mi tipo de publicación personalizada) entran bien, pero las taxonomías no. Obviamente estoy haciendo algo mal pero, ¿qué?

    
pregunta MartinJJ 25.05.2011 - 16:25

3 respuestas

23

Use wp_set_object_terms después de tener el ID de publicación para cada taxonomía:

...
$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' );
    
respondido por el Bainternet 25.05.2011 - 16:34
5

Puede hacerlo usando wp_insert_post , pero debe especificar la taxonomía también en tax_input , por lo que debe tener la apariencia de esta manera:

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

Uso implode() para que $location pueda ser una matriz con varios términos.

Además, tenga en cuenta que esto funciona solo para taxonomías no jerárquicas. Para las taxonomías jerárquicas, debe proporcionar una matriz en lugar de astring.

    
respondido por el Tomáš Kapler 17.09.2012 - 14:00
2

Fuente del problema

Después de algunas investigaciones sobre este tema, me dijeron que revisara las partes internas (lo que hice). Como estaba importando publicaciones de un feed externo como tipo de publicación personalizada, simplemente configuré el usuario en -1 (en lugar de agregar un usuario de bot). El problema que encontré fue que wp_insert_post() con un conjunto tax_input , verifica internamente la capacidad de un usuario, lo que obviamente no tiene un usuario existente.

SysBot para el rescate

La solución fue que escribí el SysBot plugin . De esta manera, simplemente podría adjuntar el usuario de SysBot (que tiene el rol de editor ) a la publicación recién creada y todo funcionó de la manera que se esperaba.

    
respondido por el kaiser 25.01.2013 - 22:05

Lea otras preguntas en las etiquetas