Відповіді:
Ви можете використовувати get_page_by_path()- не дозволяйте імені обманювати вас, третій аргумент - тип публікації:
if ( $post = get_page_by_path( 'the_slug', OBJECT, 'post_type' ) )
$id = $post->ID;
else
$id = 0;
Якщо ви зачекаєте пару днів і перейдете до 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 );
post_nameвластивість і category_nameпараметр, який повинен був бути, slugа неname
Якщо ви просто хочете ідентифікатор публікації, це зробить фокус в одному рядку.
url_to_postid( site_url('the_slug') );
url_to_postidдуже гнучка функція: ви можете передати будь-який вид постійної посилання / повної URL-адреси та отримати найбільш точний пост-ідентифікатор для цієї URL-адреси. Однак через гнучкість використання це досить повільно (особливо з великою кількістю кінцевих точок / пост-типів). Якщо ви переходите лише до кулі для певного типу допису, це використовувати набагато швидшеget_page_by_path()