Dołączanie danych taksonomii do posta za pomocą wp_insert_post

17

Próbuję wdrożyć system księgowania front-end, który pokazuje dane taksonomiczne w kilku rozwijanych polach wyboru. Każde menu rozwijane jest nazywane przy użyciu „nazwy” $argw wp_dropdown_categories().

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

Jak widać taksonomia to „lokalizacja”, a wybrana nazwa to także „lokalizacja”.

Następnie dodam zmienne dla każdej listy rozwijanej wyboru taksonomii tak jak wraz z post_title, post_content itp:

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

Na koniec dodaję dodatkowe informacje do tablicy gotowej do wysłania wp_insert_post(). Jestem całkowicie skazany na to, czy robię właściwą rzecz, dodając tax_inputdo tablicy, jak poniżej, ponieważ to, co rozumiem z kodeksu, muszę zrobić.

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

Tak więc wszystko wygląda tak:

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

Jednak po przesłaniu nowego postu wszystkie standardowe dane postu (a także mój niestandardowy typ postu) działają poprawnie, ale systematyka nie. Oczywiście robię coś złego, ale co?

MartinJJ
źródło

Odpowiedzi:

25

Użyj, wp_set_object_termsgdy masz identyfikator posta dla każdej taksonomii:

...
$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' );
Bainternet
źródło
Po prostu nie wiem, gdzie byłbym bez twojej pomocy, pracowałem za pierwszym razem ... wielkie dzięki Bainternet. Oznaczono jako odebrane
MartinJJ
Cieszę się, że mogłem pomóc :)
Bainternet
Czy $ location i $ sale_rental tablice liczb całkowitych lub ciągów znaków?
Doug
5

Możesz to zrobić za pomocą wp_insert_post , ale musisz także określić systematykę tax_input, więc powinna ona wyglądać tak:

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

Używam implode(), aby $locationmogła być tablicą z wieloma terminami.

Zauważ też, że działa to tylko w przypadku taksonomii niehierarchicznych. W przypadku taksonomii hierarchicznych musisz podać tablicę zamiast łańcucha.

Tomáš Kapler
źródło
2

Źródło problemu

Po kilku badaniach na ten temat kazano mi sprawdzić elementy wewnętrzne (co zrobiłem). Ponieważ importowałem posty z zewnętrznego źródła jako niestandardowy typ postów, po prostu ustawiłem użytkownika na -1(zamiast dodawać użytkownika bota). Problem, na który natrafiłem, polegał na tym, że wp_insert_post()z tax_inputzestawem wewnętrznie sprawdza możliwości użytkownika, których oczywiście nie ma nieistniejący użytkownik.

SysBot na ratunek

Rozwiązaniem było wtedy, że napisałem wtyczkę SysBot . W ten sposób mogłem po prostu dołączyć użytkownika SysBot (pełniącego rolę edytora ) do nowo utworzonego postu i wszystko działało zgodnie z oczekiwaniami.

kajzer
źródło