Jak zdobyć niestandardowy identyfikator posta z ślimaka?


18

Czy można pobrać niestandardowy identyfikator posta tylko z ślimaka?

O ile wiem, możemy uzyskać od id, używając tytułu. Ale może istnieć ten sam tytuł w niestandardowym typie postu, więc ponieważ ślimaki są unikalne, czy to możliwe?

Odpowiedzi:


40

Możesz użyć get_page_by_path()- nie daj się zwieść nazwie, trzeci argument to typ postu:

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

7

Jeśli zaczekasz kilka dni i uaktualnisz do Wordpress 4.4, który zostanie wydany 8 grudnia ( AFAIK ), możesz użyć nowego post_name__inparametru, w WP_Queryktórym pobiera tablicę ślimaków

PRZYKŁAD

Jeśli potrzebujesz pełnego obiektu postu

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

Jeśli potrzebujesz tylko identyfikatora

$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 );

Fajnie, ale prawdopodobnie trochę intensywnie, aby zdobyć jeden post przez ślimaka? Dlaczego dodali tę funkcję !?
TheDeadMedic,

1
@TheDeadMedic Mighty może być trochę intensywny tak, tak naprawdę nie przetestowałem wydajności w tym zakresie, po prostu dodałem jako alternatywę ;-). Co do tego, naprawdę nie wiem, wygląda jak jedna z tych miłych do niepotrzebnych rzeczy, z których WordPress jest tak sławny. Konwencja nazewnictwa, IMHO, jest również błędna, podobnie jak post_namewłaściwość i category_nameparametr, które powinny slugi nie powinny byćname
Pieter Goosen

Fajnie :) wow właściwie dla mnie to fajna aktualizacja :)
stlawrance

1
@TheDeadMedic Nie ma różnicy czasu między moją metodą a twoją metodą. Ciągle otrzymuję od 0,002 do 0,005 sekundy na uruchomienie każdego z naszych zapytań. Ponadto obie metody uruchamiają tylko 1 zapytanie. ;-)
Pieter Goosen,

1
@TheDeadMedic Miałem na myśli, że PHP ma mniej pracy - tak, oczywiście , całkowicie się zgadzam. Po prostu zawsze miło jest poznać alternatywy ( choć może nie być to najlepsze ) i mieć jakieś wzorce. Ciesz się ;-)
Pieter Goosen,

5

Jeśli chcesz tylko identyfikator posta, zrobi to samo w jednym wierszu.

url_to_postid( site_url('the_slug') );

1
url_to_postidJest bardzo elastyczna funkcja: można przejść w dowolnym rodzaju permalink / pełny adres URL i uzyskać najdokładniejsze post-ID dla tego adresu URL. Jednak ze względu na elastyczne użycie jest dość powolny (szczególnie w przypadku wielu punktów końcowych / typów postowych). Jeśli podajesz ślimak tylko dla określonego rodzaju posta, jego użycie jest znacznie szybszeget_page_by_path()
Philipp
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.