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

16

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?

Marce Castro
quelle
check this out , das hat bei mir geklappt.
Asaf Chertkoff

Antworten:

38

Die einfachste und direkteste Möglichkeit, die ID des Autors eines Beitrags außerhalb der Schleife abzurufen, ist die Verwendung der WordPress-Kernfunktion, sofern Sie die ID des Beitrags kennen 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, ist es seit WP 3.1 am einfachsten, die Funktion get_queried_object_id()(siehe Liste der Methoden) zu verwenden, die auch außerhalb der Schleife funktioniert.

$post_id = get_queried_object_id();

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

Max GJ Panas
quelle
9

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 );
?>
Alexander Poslavsky
quelle
Dies funktioniert hervorragend, wenn Sie Zugriff auf die Beitrags-ID haben. Sie können auch get_the_author_meta ('user_nicename', $ author_id) verwenden, wenn Sie den Wert nicht sofort ausgeben möchten
Andrew M
3

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 verwenden get_queried_object, um das Post-Objekt abzurufen.

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

Wenn Sie irgendwo anders sind, können Sie das globale $wp_queryObjekt verwenden und dessen $postsEigenschaft ü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 erhalten. Hierdurch entstehen keine zusätzlichen Datenbanktreffer oder ähnliches. WordPress ruft alle Beiträge auf einmal ab (zum Zeitpunkt des Schreibens). rewind_postsSetzt einfach das aktuelle Post- $postObjekt (das globale Objekt) auf den Anfang des Arrays zurück. Der Nachteil ist, dass dies dazu führen kann, dass die loop_startAktion 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();
chrisguitarguy
quelle
2

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 Posts 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.

Ryan Dennler
quelle
0

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++;
}
Richard Dinh
quelle
-2

Warum benutzt du nicht die_author_meta?

<p>The email address for user id 25 is <?php the_author_meta('user_email',25); ?></p>

Dies kann innerhalb der Schleife verwendet werden

Kuldeep Daftary
quelle
Danke, aber das Problem ist, dass ich außerhalb der Schleife bin und das nicht beheben kann. Wenn Sie sich außerhalb der Schleife befinden, muss das zweite Argument ($ author_id) angegeben werden.
Marce Castro
Stoßen! Irgendwelche Ideen? Es macht mich verrückt: - /
Marce Castro
3
außerhalb der Schleife - bitte beachten Sie die Frage.
Christine Cooper