รับโพสต์ประเภทอนุกรมวิธานที่แนบมากับ


13

การได้รับอนุกรมวิธานหรือคำศัพท์เป็นไปได้หรือไม่ที่จะดึงประเภทโพสต์ใด ๆ / ทั้งหมดที่อนุกรมวิธานแนบมาด้วย?

ตัวอย่างเช่นหากรู้ว่าการจัดทำอนุกรมวิธานcategoryหรือการให้คำศัพท์ทางcategoryอนุกรมวิธานนั้นมีฟังก์ชั่นการย้อนกลับของวิศวกรที่categoryเป็นอนุกรมวิธานpostหรือไม่?

ข้อมูลที่ไม่จำเป็น

ฉันกำลังทำงานกับเขตข้อมูลที่กำหนดเองในคำศัพท์อนุกรมวิธานที่จำเป็นต้องรู้ประเภทโพสต์โดยเฉพาะ แต่ถ้าพารามิเตอร์ประเภทโพสต์ใน URL ไม่ได้มีเหตุผลอะไรก็ตามที่ฉันประสบปัญหา

คำตอบ:


12

ถ้าเรามองเข้าไปใน$wp_taxonomiesตัวแปรทั่วโลกเราจะเห็นประเภทวัตถุที่เกี่ยวข้อง

อาจมีวิธีที่ดีกว่าในการทำเช่นนี้หรือฟังก์ชั่นหลัก แต่คุณสามารถลองต่อไปนี้:

function wpse_172645_get_post_types_by_taxonomy( $tax = 'category' )
{
    global $wp_taxonomies;
    return ( isset( $wp_taxonomies[$tax] ) ) ? $wp_taxonomies[$tax]->object_type : array();
}

จากนั้นสำหรับการตั้งค่าเริ่มต้นคุณจะได้รับ:

$out = wpse_172645_get_post_types_by_taxonomy( 'category' );
print_r( $out );

ด้วยเอาท์พุท:

Array
(
    [0] => post
)

8

get_object_taxonomiesคุณสามารถทำสิ่งที่ตรงกันข้ามกับ ใช้ร่วมกับget_post_typesเพื่อย้ำผ่านประเภทโพสต์เพื่อตรวจสอบ taxonomies ที่ลงทะเบียนไว้สำหรับแต่ละรายการ

แก้ไข - นี่คือตัวอย่างที่สร้างผลลัพธ์เช่นเดียวกับฟังก์ชั่นของ @ birgire โดยไม่ใช้ globals สกปรก

function wpse_172645_get_post_types_by_taxonomy( $tax = 'category' ){
    $out = array();
    $post_types = get_post_types();
    foreach( $post_types as $post_type ){
        $taxonomies = get_object_taxonomies( $post_type );
        if( in_array( $tax, $taxonomies ) ){
            $out[] = $post_type;
        }
    }
    return $out;
}

3

ไม่จำเป็นต้องใช้$wp_taxonomiesตัวแปรโกลบอลโดยตรงเนื่องจาก WordPress มีget_taxonomy()ฟังก์ชั่นในการเข้าถึง taxonomies ในมัน (ในแกนตั้งแต่รุ่น 2.3.0) ตั้งแต่ WordPress 4.7.0 ประเภทส่งคืนเป็นWP_Taxonomyวัตถุที่มีคุณสมบัติ$object_type

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