Як отримати користувальницький ідентифікатор повідомлення про тип публікації?


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

Якщо вам потрібен лише ідентифікатор

$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
Пітер Гусен

Приємно :) Вау насправді для мене його приємне оновлення :)
stlawrance

1
@TheDeadMedic Не існує різниці в часі між моїм методом і вашим методом. Я постійно отримую від 0,002 до 0,005 секунд для виконання кожного з наших запитів. Також обидва способи виконують лише 1 запит. ;-)
Пітер Гусен

1
@TheDeadMedic Я просто мав на увазі, що PHP має менше роботи - так, точно, повністю згоден. Просто завжди приємно знати альтернативи ( хоча це, можливо, колись і не найкраще ) та мати якісь орієнтири. Насолоджуйтесь ;-)
Пітер Гусен

5

Якщо ви просто хочете ідентифікатор публікації, це зробить фокус в одному рядку.

url_to_postid( site_url('the_slug') );

1
Це url_to_postidдуже гнучка функція: ви можете передати будь-який вид постійної посилання / повної URL-адреси та отримати найбільш точний пост-ідентифікатор для цієї URL-адреси. Однак через гнучкість використання це досить повільно (особливо з великою кількістю кінцевих точок / пост-типів). Якщо ви переходите лише до кулі для певного типу допису, це використовувати набагато швидшеget_page_by_path()
Philipp
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.