Como obter o ID de postagem personalizado do slug?

18

É possível obter o ID de postagem do tipo de postagem personalizado apenas apenas da lesma?

Pelo que sei, podemos obter do id usando title. Mas pode haver o mesmo título em um tipo de postagem personalizado, assim como as lesmas são únicas, é possível ??

stlawrance
fonte

Respostas:

40

Você pode usar get_page_by_path()- não deixe o nome enganar, o terceiro argumento é o tipo de postagem:

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

Se você esperar alguns dias e atualizar para o Wordpress 4.4, que será lançado no dia 8 de dezembro ( AFAIK ), poderá usar o novo post_name__inparâmetro no WP_Queryqual serão necessárias várias lesmas

EXEMPLO

Se você precisar do objeto completo da postagem

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

Se você precisar apenas do 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 );
Pieter Goosen
fonte
Bom, mas provavelmente um pouco intensivo para conseguir um post por lesma? Por que eles adicionaram esse recurso !?
TheDeadMedic 3/15/15
11
@ TheDeadMedic Pode ser um pouco intensivo sim, realmente não testou o desempenho nisso, apenas adicionado como meio de alternativa ;-). Quanto ao porquê, eu realmente não sei, parece uma daquelas coisas boas e desnecessárias pelas quais o WordPress é tão famoso. A convenção de nomenclatura, IMHO, é também errado, assim como o post_nameestabelecimento e category_nameparâmetro, que deveria ter sido sluge nãoname
Pieter Goosen
Nice :) wow realmente para mim o seu bom atualização :)
stlawrance
11
@TheDeadMedic Não há diferença horária entre o meu método e o seu método. Recebo constantemente entre 0,002 e 0,005 segundos para executar cada uma das nossas consultas. Além disso, ambos os métodos executam apenas 1 consulta. ;-)
Pieter Goosen
11
@TheDeadMedic Eu apenas quis dizer que o PHP tem menos trabalho a fazer - sim, com certeza, concordo totalmente. É sempre bom conhecer alternativas ( embora às vezes não seja a melhor ) e ter algum tipo de referência. Desfrute ;-)
Pieter Goosen
5

Se você quiser apenas o ID da postagem, isso fará o truque em uma linha.

url_to_postid( site_url('the_slug') );
Syclone
fonte
11
A função url_to_postidé muito flexível: você pode transmitir qualquer tipo de URL permanente / completo e obter o ID da postagem mais preciso para esse URL. No entanto, devido ao uso flexível, é bastante lento (especialmente com muitos pontos de extremidade / pós-tipos). Se você passar apenas uma lesma para um tipo específico de postagem, é muito mais rápido usar #get_page_by_path()
972 Philipp