Đính kèm dữ liệu phân loại để đăng với wp_insert_post


17

Tôi đang cố gắng thực hiện một hệ thống đăng bài mặt trước hiển thị dữ liệu phân loại trong một số trường chọn thả xuống. Mỗi danh sách thả xuống được đặt tên bằng cách sử dụng "tên" $argtrong wp_dropdown_categories().

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

Như bạn có thể thấy phân loại là "địa điểm" và tên chọn cũng là "địa điểm".

Sau đó, tôi thêm các biến cho từng danh sách phân loại chọn như vậy cùng với post_title, post_content, v.v.

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

Cuối cùng tôi thêm thông tin bổ sung vào một mảng sẵn sàng để được gửi bởi wp_insert_post(). Tôi khá bế tắc về việc liệu tôi có đang làm đúng hay không bằng cách thêm tax_inputvào mảng như dưới đây vì đây là điều tôi hiểu từ codex mà tôi cần phải làm.

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

Vì vậy, tất cả kết thúc giống như thế này:

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

Tuy nhiên, khi tôi gửi bài đăng mới, tất cả dữ liệu bài đăng tiêu chuẩn (và cả loại bài đăng tùy chỉnh của tôi) đều ổn nhưng các phân loại thì không. Tôi rõ ràng đang làm gì đó sai nhưng những gì?

Câu trả lời:


25

Sử dụng wp_set_object_termssau khi bạn có id bài đăng cho mỗi phân loại:

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

Tôi chỉ không biết mình sẽ ở đâu nếu không có sự giúp đỡ của bạn, lần đầu tiên làm việc ... cảm ơn Bai Internet. Đánh dấu là đã trả lời
MartinJJ

Vui mừng tôi có thể giúp :)
BaiNET

$ Location và $ sale_rental mảng số nguyên hay chuỗi?
Doug

5

Bạn có thể làm điều đó bằng cách sử dụng wp_insert_post , nhưng bạn phải chỉ định phân loại cũng tax_inputnhư vậy, vì vậy nó sẽ trông như thế này:

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

Tôi sử dụng implode()để $locationcó thể là một mảng với nhiều điều khoản.

Ngoài ra, lưu ý rằng điều này chỉ hoạt động cho các nguyên tắc phân loại không phân cấp. Đối với các phân loại phân cấp, bạn phải cung cấp một mảng thay vì làm mờ.


2

Nguồn gốc của vấn đề

Sau một số nghiên cứu về chủ đề này, tôi được yêu cầu kiểm tra các phần bên trong (mà tôi đã làm). Vì tôi đang nhập bài đăng từ nguồn cấp dữ liệu bên ngoài dưới dạng loại bài đăng tùy chỉnh, tôi chỉ cần đặt người dùng thành -1(thay vì thêm người dùng bot). Vấn đề tôi gặp phải là wp_insert_post()với một tax_inputbộ, kiểm tra nội bộ về khả năng của người dùng, điều mà một người dùng không tồn tại rõ ràng là không có.

SysBot để giải cứu

Giải pháp sau đó là tôi đã viết plugin SysBot . Bằng cách này, tôi có thể chỉ cần đính kèm người dùng SysBot (có vai trò biên tập viên ) vào bài đăng mới được tạo và mọi thứ hoạt động theo cách nó được mong đợi.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.