การแนบข้อมูล taxonomy เพื่อโพสต์ด้วย wp_insert_post


17

ฉันกำลังพยายามใช้ระบบการโพสต์ส่วนหน้าซึ่งแสดงข้อมูล taxonomy ในหลาย ๆ ช่องเลือก แต่ละเมนูแบบเลื่อนลงเป็นชื่อโดยใช้ "ชื่อ" ใน$argwp_dropdown_categories()

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

ตามที่คุณเห็น taxonomy คือ "location" และชื่อที่เลือกคือ "location"

ฉันจะเพิ่มตัวแปรสำหรับดร็อปดาวน์เลือก taxonomy เช่นนั้นพร้อมกับ post_title, post_content ฯลฯ :

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

wp_insert_post()ในที่สุดผมก็เพิ่มข้อมูลเสริมเข้าไปในอาร์เรย์พร้อมที่จะถูกส่งโดย ฉันค่อนข้างติดอยู่กับว่าฉันกำลังทำสิ่งที่ถูกต้องหรือไม่โดยการเพิ่มtax_inputเข้าไปในอาร์เรย์เช่นด้านล่างนี้เป็นสิ่งที่ฉันเข้าใจจาก codex ที่ฉันต้องทำ

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

ดังนั้นมันจะเป็นดังนี้:

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

อย่างไรก็ตามเมื่อฉันส่งโพสต์ใหม่ข้อมูลโพสต์มาตรฐานทั้งหมด (รวมถึงประเภทโพสต์ที่กำหนดเองของฉัน) ก็โอเค แต่ taxonomies ไม่ได้ เห็นได้ชัดว่าฉันกำลังทำอะไรผิด แต่อะไรนะ?

คำตอบ:


25

ใช้wp_set_object_termsหลังจากที่คุณมีรหัสโพสต์สำหรับแต่ละ taxonomy:

...
$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 ทำเครื่องหมายว่าได้รับคำตอบ
MartinJJ

ดีใจที่ฉันช่วยได้ :)
Bainternet

$ location และ $ sale_rental array เป็นจำนวนเต็มหรือสตริง?
Doug

5

คุณสามารถทำได้โดยใช้wp_insert_postแต่คุณต้องระบุ taxonomy เช่นกันtax_inputดังนั้นจึงควรมีลักษณะดังนี้:

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

ฉันใช้implode()เพื่อที่$locationอาจเป็นอาร์เรย์ที่มีหลายคำ

นอกจากนี้โปรดสังเกตว่าสิ่งนี้ใช้ได้เฉพาะกับอนุกรมวิธานที่ไม่ใช่แบบลำดับชั้น สำหรับ taxonomies แบบลำดับชั้นคุณต้องระบุอาร์เรย์แทน astring


2

ที่มาของปัญหา

หลังจากการวิจัยในหัวข้อนี้ฉันได้รับคำสั่งให้ตรวจสอบภายใน (ซึ่งฉันทำ) ในขณะที่ฉันกำลังนำเข้าโพสต์จากฟีดภายนอกเป็นประเภทโพสต์ที่กำหนดเองฉันเพียงตั้งค่าผู้ใช้เป็น-1(แทนที่จะเพิ่มผู้ใช้บอท) ปัญหาที่ฉันพบคือwp_insert_post()มีการtax_inputตั้งค่าภายในตรวจสอบความสามารถของผู้ใช้ซึ่งผู้ใช้ที่ไม่มีอยู่จริงไม่มีอยู่จริง

SysBot สำหรับการช่วยเหลือ

วิธีการแก้ปัญหาแล้วคือการที่ฉันเขียนปลั๊กอิน SysBot วิธีนี้ฉันสามารถแนบผู้ใช้ SysBot (ซึ่งมีบทบาทของตัวแก้ไข ) กับโพสต์ที่สร้างขึ้นใหม่และทุกอย่างทำงานตามที่คาดไว้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.