วิธีรับโพสต์ประเภทโพสต์ที่กำหนดเองจากกระสุน?


18

เป็นไปได้หรือไม่ที่จะคว้ารหัสโพสต์ประเภทโพสต์ที่กำหนดเองจากกระสุนเพียงอย่างเดียว?

เท่าที่ฉันรู้เราสามารถได้รับจาก id โดยใช้ชื่อ แต่อาจมีชื่อเรื่องเดียวกันในประเภทโพสต์ที่กำหนดเองเพื่อให้ทากเป็นเอกลักษณ์เป็นไปได้ ???

คำตอบ:


40

คุณสามารถใช้get_page_by_path()- อย่าให้ชื่อหลอกคุณอาร์กิวเมนต์ที่สามคือประเภทโพสต์:

if ( $post = get_page_by_path( 'the_slug', OBJECT, 'post_type' ) )
    $id = $post->ID;
else
    $id = 0;

7

หากคุณรอสองสามวันและอัปเกรดเป็นWordpress 4.4ซึ่งจะวางจำหน่ายในวันที่ 8 ธันวาคม ( AFAIK ) คุณสามารถใช้post_name__inพารามิเตอร์ใหม่WP_Queryซึ่งใช้อาร์เรย์ของกระสุน

ตัวอย่าง

หากคุณต้องการวัตถุโพสต์ที่สมบูรณ์

$args = [
    'post_type'      => 'my_custom_post_type',
    'posts_per_page' => 1,
    'post_name__in'  => ['post-slug']
];
$q = get_posts( $args );
var_dump( $q );

หากคุณต้องการ ID เท่านั้น

$args = [
    'post_type'      => 'my_custom_post_type',
    'posts_per_page' => 1,
    'post_name__in'  => ['post-slug'],
    'fields'         => 'ids' 
];
$q = get_posts( $args );
var_dump( $q );

ดี แต่อาจเป็นเรื่องเล็กน้อยที่จะได้รับหนึ่งโพสต์โดยกระสุน? ทำไมพวกเขาจึงเพิ่มคุณสมบัตินั้น!
TheDeadMedic

1
@TheDeadMedic อาจเป็นบิตเข้มข้นใช่ไม่ได้ทดสอบประสิทธิภาพจริง ๆ เกี่ยวกับเรื่องนี้เพียงเพิ่มเป็นวิธีการทางเลือก ;-) ด้วยเหตุใดฉันไม่รู้จริง ๆ ดูเหมือนว่าหนึ่งในสิ่งที่ดีที่ไม่จำเป็นที่ WordPress มีชื่อเสียงมาก แบบแผนการตั้งชื่อ IMHO นั้นก็ผิดเช่นเดียวกับpost_nameคุณสมบัติและcategory_nameพารามิเตอร์ซึ่งควรจะเป็นslugและไม่ใช่name
Pieter Goosen

Nice :) ว้าวสำหรับฉันแล้วมันเป็นการอัพเดตที่ดี :)
stlawrance

1
@TheDeadMedic ไม่มีความแตกต่างเวลาระหว่างวิธีการของฉันและวิธีการของคุณ ฉันได้รับอย่างต่อเนื่องระหว่าง 0.002 ถึง 0.005 วินาทีในการเรียกใช้แบบสอบถามของเรา นอกจากนี้ทั้งสองวิธีเรียกใช้ 1 แบบสอบถามเท่านั้น ;-)
Pieter Goosen

1
@TheDeadMedic ฉันแค่หมายถึง PHP มีงานต้องทำน้อย - ใช่แน่นอนทั้งหมดเห็นด้วย มันเป็นเรื่องดีเสมอที่จะรู้ทางเลือกอื่น ( แม้ว่าบางครั้งมันอาจจะไม่ดีที่สุด ) และมีเกณฑ์มาตรฐานบางอย่าง เพลิดเพลินกับ ;-)
Pieter Goosen

5

หากคุณต้องการรหัสโพสต์สิ่งนี้จะทำเคล็ดลับในหนึ่งบรรทัด

url_to_postid( site_url('the_slug') );

1
url_to_postidเป็นฟังก์ชั่นที่มีความยืดหยุ่นมาก: คุณสามารถส่งผ่านในชนิดของความคิดเห็น / URL เต็มรูปแบบใด ๆ และได้รับถูกต้องโพสต์-ID ที่สุดสำหรับ URL ที่ อย่างไรก็ตามเนื่องจากการใช้งานที่ยืดหยุ่นจึงค่อนข้างช้า (โดยเฉพาะกับจุดปลาย / ประเภทโพสต์) หากคุณผ่านการบุ้งเฉพาะประเภทโพสต์ที่เฉพาะเจาะจงมันจะเร็วกว่ามากที่จะใช้get_page_by_path()
Philipp
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.