Bagaimana cara mendapatkan id posting jenis tulisan khusus dari siput?


18

Apakah mungkin untuk mengambil id posting jenis posting khusus hanya dari slug?

Seperti yang saya tahu kita bisa dapatkan dari id dengan menggunakan judul. Tetapi bisa ada judul yang sama dalam jenis posting kustom sehingga siput unik apakah mungkin ???

Jawaban:


40

Anda dapat menggunakan get_page_by_path()- jangan biarkan nama membodohi Anda, argumen ketiga adalah jenis posting:

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

7

Jika Anda menunggu beberapa hari, dan meningkatkan ke Wordpress 4.4 yang akan dirilis 8 Desember ( AFAIK ), Anda dapat menggunakan post_name__inparameter baru di WP_Querymana mengambil array siput

CONTOH

Jika Anda memerlukan objek posting lengkap

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

Jika Anda hanya membutuhkan 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 );

Bagus, tapi mungkin agak intensif untuk mendapatkan satu posting dengan siput? Kenapa mereka menambahkan fitur itu !?
TheDeadMedic

1
@TheDeadMedic Perkasa menjadi agak intensif ya, belum benar-benar menguji kinerja ini, hanya ditambahkan sebagai sarana alternatif ;-). Mengenai alasannya, saya benar-benar tidak tahu, sepertinya salah satu dari hal-hal menyenangkan yang tidak perlu yang terkenal dengan WordPress. Konvensi penamaan, IMHO, juga salah, sama seperti post_nameproperti dan category_nameparameter, yang seharusnya slugdan tidakname
Pieter Goosen

Bagus :) wow sebenarnya bagi saya pembaruannya bagus :)
stlawrance

1
@TheDeadMedic Tidak ada perbedaan waktu antara metode saya dan metode Anda. Saya terus mendapatkan antara 0,002 dan 0,005 detik untuk menjalankan setiap pertanyaan kami. Selain itu, kedua metode hanya menjalankan 1 kueri. ;-)
Pieter Goosen

1
@TheDeadMedic Maksud saya PHP hanya memiliki sedikit pekerjaan yang harus dilakukan - ya, pasti, sangat setuju. Itu selalu menyenangkan untuk mengetahui alternatif ( meskipun kadang-kadang mungkin bukan yang terbaik ) dan memiliki semacam tolok ukur. Nikmati ;-)
Pieter Goosen

5

Jika Anda hanya ingin id posting ini akan melakukan trik dalam satu baris.

url_to_postid( site_url('the_slug') );

1
Ini url_to_postidadalah fungsi yang sangat fleksibel: Anda dapat mengirimkan segala jenis permalink / URL lengkap dan mendapatkan post-ID paling akurat untuk URL itu. Namun, karena penggunaannya yang fleksibel, ini sangat lambat (terutama dengan banyak titik akhir / tipe pasca). Jika Anda hanya memasukkan siput untuk jenis posting tertentu, itu jauh lebih cepat digunakanget_page_by_path()
Philipp
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.