Adjuntar datos de taxonomía para publicar con wp_insert_post


17

Estoy tratando de implementar un sistema de publicación frontal que muestre datos de taxonomía en varios campos de selección desplegable. Cada uno de los menús desplegables se nombra utilizando el "nombre" $argen 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, 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 en una matriz lista para ser enviada por wp_insert_post(). Estoy bastante atrapado en si estoy haciendo lo correcto al agregar tax_inputa la matriz como a continuación, ya que esto es lo que entiendo del códice que necesito hacer.

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

Para que todo termine 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é?

Respuestas:


25

Use wp_set_object_termsdespués de tener la identificación 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' );

Simplemente no sé dónde estaría sin su ayuda, trabajé por primera vez ... muchas gracias Bainternet. Marcado como respondido
MartinJJ

Me alegro de poder ayudar :)
Bainternet

¿Son $ location y $ sale_rental arrays de enteros o de cadenas?
Doug

5

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

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

Lo uso implode()para que $locationpueda ser una matriz con múltiples términos.

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


2

Fuente del problema

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

SysBot para el rescate

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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.