Come ottenere l'ID post personalizzato del tipo di post da slug?


18

È possibile catturare l'ID del post personalizzato del tipo di post solo dalla lumaca?

Per quanto ne so possiamo ottenere dall'id usando il titolo. Ma può esserci lo stesso titolo in un tipo di post personalizzato, quindi le lumache sono uniche è possibile ???

Risposte:


40

Puoi usare get_page_by_path()- non lasciarti ingannare dal nome, il terzo argomento è il tipo di post:

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

7

Se aspetti un paio di giorni e esegui l' aggiornamento a Wordpress 4.4, che verrà rilasciato l'8 dicembre ( AFAIK ), puoi utilizzare il nuovo post_name__inparametro in WP_Querycui accetta una serie di slug

ESEMPIO

Se hai bisogno dell'oggetto post completo

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

Se hai solo bisogno dell'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 );

Bello, ma probabilmente un po 'intenso per ottenere un post da lumaca? Perché hanno aggiunto quella funzione !?
TheDeadMedic

1
@TheDeadMedic Potrebbe essere un po 'intensivo sì, non ho davvero testato le prestazioni su questo, appena aggiunto come mezzo di un'alternativa ;-). Quanto al perché, davvero non lo so, sembra una di quelle cose carine e inutili per cui WordPress è così famoso. Anche la convenzione di denominazione, IMHO, è sbagliata, proprio come la post_nameproprietà e il category_nameparametro, che avrebbero dovuto essere sluge nonname
Pieter Goosen,

Bello :) wow in realtà per me il suo bel aggiornamento :)
stlawrance

1
@TheDeadMedic Non c'è differenza di tempo tra il mio metodo e il tuo metodo. Ricevo costantemente tra 0,002 e 0,005 secondi per eseguire ciascuna delle nostre query. Inoltre, entrambi i metodi eseguono solo 1 query. ;-)
Pieter Goosen il

1
@TheDeadMedic Volevo solo dire che PHP ha meno lavoro da fare - sì, certo, sono assolutamente d'accordo. È sempre bello conoscere le alternative ( anche se a volte potrebbe non essere il migliore ) e avere qualche tipo di benchmark. Divertiti ;-)
Pieter Goosen il

5

Se vuoi solo l'id post, questo farà il trucco in una riga.

url_to_postid( site_url('the_slug') );

1
La url_to_postidè una funzione molto flessibile: è possibile passare in qualsiasi tipo di permalink / URL completo e ottenere la più accurata post-ID per tale URL. Tuttavia, a causa dell'uso flessibile è piuttosto lento (specialmente con molti endpoint / post-tipi). Se passi solo una lumaca per un tipo di post specifico, è molto più veloce da usareget_page_by_path()
Philipp
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.