¿Cómo obtener una identificación de publicación de tipo de publicación personalizada de slug?

18

¿Es posible obtener el ID de publicación de tipo de publicación personalizado solo desde slug?

Por lo que sé, podemos obtener de id usando title. Pero puede haber el mismo título en un tipo de publicación personalizado, por lo que, como las babosas son únicas, ¿es posible?

Stlawrance
fuente

Respuestas:

40

Puedes usarlo get_page_by_path(), no dejes que el nombre te engañe, el tercer argumento es el tipo de publicación:

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

Si espera un par de días y se actualiza a Wordpress 4.4, que se lanzará el 8 de diciembre ( AFAIK ), puede usar el nuevo post_name__inparámetro en el WP_Queryque toma una serie de babosas

EJEMPLO

Si necesita el objeto de publicación completo

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

Si solo necesitas la identificación

$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
fuente
¿Agradable, pero probablemente un poco intensivo para conseguir una publicación por babosa? ¿Por qué agregaron esa característica?
TheDeadMedic
1
@TheDeadMedic Podría ser un poco intensivo sí, realmente no he probado el rendimiento en esto, solo lo agregué como medio de una alternativa ;-). En cuanto a por qué, realmente no lo sé, parece una de esas cosas agradables y innecesarias por las que WordPress es tan famoso. La convención de nomenclatura, en mi humilde opinión, también está mal, al igual que la post_namepropiedad y el category_nameparámetro, que debería haber sido slugy noname
Pieter Goosen
Agradable :) wow en realidad para mí es una buena actualización :)
stlawrance 03 de
1
@TheDeadMedic No hay diferencia horaria entre mi método y tu método. Constantemente obtengo entre 0.002 y 0.005 segundos para ejecutar cada una de nuestras consultas. Además, ambos métodos ejecutan 1 consulta solamente. ;-)
Pieter Goosen
1
@TheDeadMedic Solo quería decir que PHP tiene menos trabajo que hacer , sí, seguro, totalmente de acuerdo. Siempre es bueno conocer alternativas ( aunque a veces puede no ser la mejor ) y tener algún tipo de puntos de referencia. Disfruta ;-)
Pieter Goosen el
5

Si solo desea la identificación de la publicación, esto hará el truco en una línea.

url_to_postid( site_url('the_slug') );
Syclone
fuente
1
Esta url_to_postides una función muy flexible: puede pasar cualquier tipo de enlace permanente / URL completo y obtener la ID de identificación más precisa para esa URL. Sin embargo, debido al uso flexible, es bastante lento (especialmente con muchos puntos finales / post-tipos). Si solo pasas una babosa para un tipo de publicación específico, es mucho más rápido de usarget_page_by_path()
Philipp