Wie bekomme ich eine benutzerdefinierte Beitragstyp-Beitrags-ID von slug?

18

Ist es möglich, den benutzerdefinierten Beitragstyp Beitrags-ID nur von Schnecke zu greifen?

Soweit ich weiß, können wir mit title von id abrufen. Aber es kann den gleichen Titel in einem benutzerdefinierten Beitragstyp geben, so dass die Slugs eindeutig sind. Ist das möglich?

Fehler
quelle

Antworten:

40

Sie können verwenden get_page_by_path()- lassen Sie sich nicht vom Namen täuschen, das dritte Argument ist der Beitragstyp:

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

Wenn Sie ein paar Tage warten und ein Upgrade auf Wordpress 4.4 durchführen , das am 8. Dezember ( AFAIK ) veröffentlicht wird, können Sie den neuen post_name__inParameter verwenden, in WP_Querydem eine Reihe von Slugs verwendet werden

BEISPIEL

Wenn Sie das komplette Beitragsobjekt benötigen

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

Wenn Sie nur die ID benötigen

$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
quelle
Schön, aber wahrscheinlich ein bisschen intensiv, um einen Beitrag per Schnecke zu bekommen? Warum haben sie diese Funktion hinzugefügt?
TheDeadMedic
1
@TheDeadMedic Mächtig, ein bisschen intensiv, ja, habe die Leistung noch nicht wirklich getestet, nur als Alternative hinzugefügt ;-). Was den Grund angeht, weiß ich wirklich nicht, es sieht aus wie eines dieser netten, unnötigen Dinge, für die WordPress so berühmt ist. Die Namenskonvention, IMHO, ist ebenfalls falsch, genau wie die post_nameEigenschaft und der category_nameParameter, die hätten sein sollen slugund nichtname
Pieter Goosen
Nizza :) wow eigentlich für mich sein schönes Update :)
stlawrance
1
@TheDeadMedic Es gibt keinen Zeitunterschied zwischen meiner Methode und Ihrer Methode. Ich habe ständig zwischen 0,002 und 0,005 Sekunden Zeit, um jede unserer Abfragen auszuführen. Außerdem führen beide Methoden nur eine Abfrage aus. ;-)
Pieter Goosen
1
@TheDeadMedic Ich habe nur gemeint, dass PHP weniger Arbeit zu tun hat - ja, da stimme ich vollkommen zu. Es ist einfach immer schön, Alternativen zu kennen (auch wenn es manchmal nicht die besten sind ) und eine Art Benchmark zu haben. Viel Spaß ;-)
Pieter Goosen
5

Wenn Sie nur die Beitrags-ID möchten, erledigt dies den Trick in einer Zeile.

url_to_postid( site_url('the_slug') );
Zyklon
quelle
1
Dies url_to_postidist eine sehr flexible Funktion: Sie können jede Art von Permalink / vollständiger URL übergeben und die genaueste Post-ID für diese URL erhalten. Aufgrund der flexiblen Nutzung ist es jedoch recht langsam (insbesondere mit vielen Endpunkten / Post-Typen). Wenn Sie nur einen Slug für einen bestimmten Post-Typ übergeben, ist es viel schneller zu verwendenget_page_by_path()
Philipp