it-swarm.com.de

So erhalten Sie die Autoren-ID außerhalb der Schleife

Ich kann die Beitragsautoren-ID nicht außerhalb der Schleife abrufen, damit get_the_author_meta funktioniert. Bisher habe ich verschiedene Ansätze ausprobiert:

1.

$author_id=$post->post_author;

2.

global $post;
$author_id=$post->post_author;

3.

$post_tmp = get_post($post_id);
$author_id = $post_tmp->post_author;

4.

$author_id = $posts[0]->post_author;

Ich benötige die Autoren-ID, um sie weiterzuleiten an:

$address = get_the_author_meta('user_email', $author_id);

Irgendwelche Vorschläge?

14
Marce Castro

Die einfachste und direkteste Möglichkeit, die ID des Autors eines Beitrags außerhalb der Schleife zu ermitteln, ist die Verwendung der WordPress-Kernfunktion get_post_field() .

$post_author_id = get_post_field( 'post_author', $post_id );

Wenn Sie die Beitrags-ID der Seite, auf der Sie sich befinden, noch nicht kennen, verwenden Sie seit WP 3.1 am einfachsten die Funktion get_queried_object_id() (suchen Sie sie in der Liste der Methoden) das funktioniert auch außerhalb der Schleife.

$post_id = get_queried_object_id();

Wenn dies für Sie nicht funktioniert, geben Sie bitte eine ausführlichere Erklärung an, wo Sie versuchen, Ihren Code auszuführen, und wir können sehen, ob wir Ihnen weiterhelfen können.

35
Max G J Panas

So erhalten Sie die Autoren-ID außerhalb der WordPress-Schleife:

<?php
global $post;
$author_id=$post->post_author;
?>

Dann ist es uns möglich the_author_meta:

<?php
the_author_meta( 'user_nicename', $author_id );
?>
9

Kommt darauf an, wo du bist. Wenn Sie sich auf einer einzelnen Seite befinden (z. B. nur einen einzelnen {{Post-Typ hier einfügen}}), können Sie get_queried_object verwenden, der das Post-Objekt abruft.

<?php
if (is_singular()) {
    $author_id = get_queried_object()->post_author;
    $address = get_the_author_meta('user_email', $author_id);
}

Wenn Sie sich an einem anderen Ort befinden, können Sie das globale Objekt $wp_query verwenden und dessen Eigenschaft $posts überprüfen. Dies sollte auch auf einzelnen Seiten funktionieren.

<?php
global $wp_query;
if (!empty($wp_query->posts)) {
    $author_id = $wp_query->posts[0]->post_author;
    $address = get_the_author_meta('user_email', $author_id);
}

Sie können die Schleife auch einfach "falsch starten" und zurückspulen, um die Autoren-ID zu ermitteln. Hierdurch entstehen keine zusätzlichen Datenbanktreffer oder ähnliches. WordPress ruft alle Beiträge auf einmal ab (zum Zeitpunkt des Schreibens). rewind_posts setzt nur das aktuelle Beitragsobjekt (das globale $post) an den Anfang des Arrays zurück. Der Nachteil ist, dass dies dazu führen kann, dass die loop_start -Aktion viel früher ausgelöst wird, als Sie es möchten - keine große Sache, nur etwas, dessen Sie sich bewusst sein müssen.

<?php
// make sure you're at the beginning.
rewind_posts();

// start the loop
the_post();

// get what you need
$address = get_the_author_meta('user_email');

// back to normal
rewind_posts();
3
chrisguitarguy

Das sieht so aus, als würde es außerhalb der Schleife funktionieren. Vielleicht hilft das.

    $thelogin = get_query_var('author_name');
    $theauthor = get_userdatabylogin($thelogin);

Sie können die ID des Beitrags auch manuell festlegen und auf folgende Weise abrufen:

global $wp_query;
$thePostID = $wp_query->post->ID;
$postdata = get_post($thePostID, ARRAY_A);
$authorID = $postdata['post_author'];

Ändern Sie die ID aus, um die ID manuell für den Zugriff außerhalb der Schleife zu veröffentlichen.

Keine großartigen Lösungen, aber hoffentlich hilft es.

2
Ryan Dennler

Ich hatte hier das gleiche Problem, als ich versuchte, ein Widget zu erstellen, in dem vorgestellte Beiträge mit Autoreninformationen angezeigt wurden.

Ich habe einige der Hinweise von @chrisguitarguy 2. Tipp verwendet.

Mein Code sah so aus:

<?php    

$count = 0;
$query_args = array(
      'posts_per_page' => 5,
     );
$com_query = new WP_Query( $query_args );

$feat_posts = $com_query->posts; // array, so we can access each post based on position

while ($com_query->have_posts()) {              
    $com_query->the_post();
        $author_name= get_the_author_meta('user_nicename',  $feat_posts[$count]->post_author);
        $count++;
}
0
Richard Dinh