Можно ли получить пользовательский идентификатор поста только из slug?
Насколько я знаю, мы можем получить из id, используя заголовок. Но в пользовательском типе поста может быть один и тот же заголовок, так как слизни уникальны, возможно ли это?
Можно ли получить пользовательский идентификатор поста только из slug?
Насколько я знаю, мы можем получить из id, используя заголовок. Но в пользовательском типе поста может быть один и тот же заголовок, так как слизни уникальны, возможно ли это?
Ответы:
Вы можете использовать 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()