Làm thế nào để có được id bài đăng loại tùy chỉnh từ sên?


18

Có thể lấy id bài đăng loại tùy chỉnh chỉ từ sên?

Theo tôi biết, chúng tôi có thể nhận được từ id bằng cách sử dụng tiêu đề. Nhưng có thể có cùng tiêu đề trong một loại bài đăng tùy chỉnh để sên là duy nhất có khả thi không ???

Câu trả lời:


40

Bạn có thể sử dụng get_page_by_path()- đừng để tên đánh lừa bạn, đối số thứ ba là loại bài đăng:

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

7

Nếu bạn đợi một vài ngày và nâng cấp lên Wordpress 4.4 sẽ được phát hành vào ngày 8 tháng 12 ( AFAIK ), bạn có thể sử dụng post_name__intham số mới trong WP_Queryđó có một loạt các con sên

THÍ DỤ

Nếu bạn cần đối tượng bài hoàn chỉnh

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

Nếu bạn chỉ cần 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 );

Đẹp, nhưng có lẽ một chút chuyên sâu để có được một bài bằng sên? Tại sao họ lại thêm tính năng đó!?
TheDeadMedic

1
@TheDeadMedic Có thể hơi chuyên sâu một chút, chưa thực sự kiểm tra hiệu năng về điều này, chỉ được thêm vào như một phương tiện thay thế ;-). Về lý do tại sao, tôi thực sự không biết, trông giống như một trong những thứ tốt đẹp không cần thiết mà WordPress rất nổi tiếng. Quy ước đặt tên, IMHO, cũng sai, giống như thuộc post_nametính và category_nametham số, lẽ ra phải slugvà khôngname
Pieter Goosen

Đẹp :) wow thực sự đối với tôi bản cập nhật tốt đẹp của nó :)
stlawrance

1
@TheDeadMedic Không có sự khác biệt về thời gian giữa phương pháp của tôi và phương pháp của bạn. Tôi liên tục nhận được từ 0,002 đến 0,005 giây để chạy từng truy vấn của chúng tôi. Ngoài ra, cả hai phương pháp chỉ chạy 1 truy vấn. ;-)
Pieter Goosen

1
@TheDeadMedic Tôi chỉ có nghĩa là PHP có ít việc phải làm - vâng, chắc chắn, hoàn toàn đồng ý. Thật là tốt khi biết các lựa chọn thay thế ( mặc dù đôi khi nó có thể không phải là tốt nhất ) và có một số loại điểm chuẩn. Thưởng thức ;-)
Pieter Goosen

5

Nếu bạn chỉ muốn id bài đăng này sẽ thực hiện thủ thuật trong một dòng.

url_to_postid( site_url('the_slug') );

1
Đây url_to_postidlà một chức năng rất linh hoạt: bạn có thể chuyển vào bất kỳ loại permalink / URL đầy đủ nào và nhận được ID sau chính xác nhất cho URL đó. Tuy nhiên, do cách sử dụng linh hoạt nên nó khá chậm (đặc biệt là có nhiều điểm cuối / loại bài đăng). Nếu bạn chỉ chuyển qua một con sên cho một loại bài cụ thể, thì nó sẽ nhanh hơn rất nhiều để sử dụngget_page_by_path()
Philipp
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.