WordPress-Abfrage einzelner Beitrag von Slug

85

Für den Moment, in dem ich einen einzelnen Beitrag ohne Schleife anzeigen möchte, verwende ich Folgendes:

<?php
$post_id = 54;
$queried_post = get_post($post_id);
echo $queried_post->post_title; ?>

Das Problem ist, dass sich die IDs normalerweise ändern, wenn ich die Site verschiebe. Gibt es eine Möglichkeit, diesen Beitrag per Slug abzufragen?

George Oiko
quelle
3
Warum sollten sich die IDs beim Verschieben der Site ändern? Es sei denn, Sie verschieben die Site mithilfe der Import- / Exportfunktion von WP (die nicht besonders zuverlässig ist und ich würde empfehlen, sie zu vermeiden). Wenn Sie einfach die Datenbank migrieren, ändert sich nichts.
Ennui

Antworten:

119

Aus dem WordPress-Codex:

<?php
$the_slug = 'my_slug';
$args = array(
  'name'        => $the_slug,
  'post_type'   => 'post',
  'post_status' => 'publish',
  'numberposts' => 1
);
$my_posts = get_posts($args);
if( $my_posts ) :
  echo 'ID on the first post found ' . $my_posts[0]->ID;
endif;
?>

WordPress Codex Beiträge abrufen

ztirom
quelle
1
Dies zeigt die ID - $ my_posts [0] -> ID; - aber wie zeige ich den Seiteninhalt an? Ich habe alles versucht und nichts funktioniert!
James Wilson
1
@ JamesWilson beginnt mit der Verwendung von kint. echo $my_posts[0]->post_content
Toskan
Dies scheint mehrere und damit mehrdeutige Ergebnisse zu liefern, wenn einige Schnecken ziemlich ähnlich sind (z. B. 'Arbeit' gegen 'Arbeiten')
Simon H
2
Ich bin mir nicht sicher warum, aber ich musste 'name' in 'post_name' ändern, damit diese Abfrage für mich funktioniert
Mike
Dies funktioniert, um das vorgestellte Bild zu erhalten $ feat_image = wp_get_attachment_url (get_post_thumbnail_id ($ my_posts [0] -> ID));
Omar
68

Wie wäre es mit?

<?php
   $queried_post = get_page_by_path('my_slug',OBJECT,'post');
?>
Mike Garcia
quelle
9
Achtenmy-slugmy-parent-slug/my-slug
Sie
2
Meine Erfahrung seit dem Lesen dieses Beitrags unterstützt @Erenor Paz - es mag zwar hübsch und einfach sein, aber es wird komplex, wenn Sie von der Konsistenz der Schnecke abhängen - was sich einfach durch Ändern des übergeordneten Beitrags ändern kann ... seufz - vielleicht wir könnte WordPress-Entwickler davon überzeugen, Platzhalter im Pfad zuzulassen, Beispiel: get_page_by_path ('* / my_slug');
Aequalsb
Nicht sehr zuverlässig
Amin
7

eine kostengünstigere und wiederverwendbare Methode

function get_post_id_by_name( $post_name, $post_type = 'post' )
{
    $post_ids = get_posts(array
    (
        'post_name'   => $post_name,
        'post_type'   => $post_type,
        'numberposts' => 1,
        'fields' => 'ids'
    ));

    return array_shift( $post_ids );
}
Maarten Menten
quelle
6

Da sich die WordPress-API geändert hat, können Sie get_posts nicht mit dem Parameter 'post_name' verwenden. Ich habe die Maartens-Funktion ein wenig modifiziert:

function get_post_id_by_slug( $slug, $post_type = "post" ) {
    $query = new WP_Query(
        array(
            'name'   => $slug,
            'post_type'   => $post_type,
            'numberposts' => 1,
            'fields'      => 'ids',
        ) );
    $posts = $query->get_posts();
    return array_shift( $posts );
}
Nurickan
quelle
Für zusätzliche Leistung würde ich auch 'no_found_rows' => truedie Argumente get_posts hinzufügen .
Philipp