Adjuntar datos de taxonomía a una entrada con wp_insert_post

25 may 2011, 17:25:48
Vistas: 44.5K
Votos: 23

Estoy tratando de implementar un sistema de publicación desde el frontend que muestra datos de taxonomía en varios campos desplegables. Cada uno de los desplegables se nombra usando el argumento "name" $arg en wp_dropdown_categories().

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

Como puedes ver, la taxonomía es "location" y el nombre del select también es "location".

Luego agrego las variables para cada uno de los desplegables de taxonomía 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 extra en un array listo para ser enviado por wp_insert_post(). Estoy bastante confundido sobre si estoy haciendo lo correcto al agregar tax_input en el array como se muestra a continuación, ya que esto es lo que entiendo del codex que necesito hacer.

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

De modo que todo termina viéndose 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 envío la nueva entrada, todos los datos estándar de la entrada (y también mi tipo de entrada personalizado) se insertan correctamente, pero las taxonomías no. Obviamente estoy haciendo algo mal, ¿pero qué?

0
Todas las respuestas a la pregunta 3
3
37

Usa wp_set_object_terms después de tener el ID del post 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' );
25 may 2011 17:34:58
Comentarios

Simplemente no sé dónde estaría sin tu ayuda, funcionó a la primera... muchas gracias Bainternet. Marcado como respondido

MartinJJ MartinJJ
25 may 2011 17:45:27

Me alegra haber podido ayudar :)

Bainternet Bainternet
25 may 2011 17:50:01

¿Son $location y $sale_rental arrays de enteros o de strings?

Doug Doug
24 oct 2014 00:47:41
0

Puedes hacerlo usando wp_insert_post, pero debes especificar también la taxonomía en tax_input, por lo que debería verse así:

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

Yo uso implode() para que $location pueda ser un array con múltiples términos.

Además, ten en cuenta que esto solo funciona para taxonomías no jerárquicas. Para taxonomías jerárquicas debes proporcionar un array en lugar de una cadena.

17 sept 2012 15:00:33
1

Origen del problema

Después de investigar un poco sobre este tema, me sugirieron que revisara los internos (lo cual hice). Como estaba importando publicaciones desde un feed externo como tipo de publicación personalizada, simplemente establecí el usuario como -1 (en lugar de agregar un usuario bot). El problema con el que me encontré fue que wp_insert_post() con un tax_input configurado, verifica internamente la capacidad del usuario, la cual obviamente no tiene un usuario que no existe.

SysBot al rescate

La solución entonces fue que escribí el plugin SysBot. De esta manera, podía simplemente asignar el usuario SysBot (que tiene el rol de editor) a esa nueva publicación y todo funcionó como se esperaba.

25 ene 2013 23:05:04
Comentarios

¡Esto explica por qué wp_insert_post cuando se ejecuta vía cron no insertaba los términos de taxonomía!

MediaFormat MediaFormat
1 sept 2023 17:00:18