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?
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.
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 );
?>
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();
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.
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++;
}