Come ottenere l'ID dell'Autore fuori dal loop
Non riesco a ottenere l'ID dell'autore del post fuori dal loop per far funzionare get_the_author_meta. Finora ho provato diversi approcci:
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;
Ho bisogno dell'ID dell'autore per passarlo a:
$address = get_the_author_meta('user_email', $author_id);
Qualche suggerimento?
Il modo più semplice e diretto per ottenere l'ID dell'autore di un post al di fuori del loop, se si conosce l'ID del post, è utilizzare la funzione principale di WordPress get_post_field()
.
$post_author_id = get_post_field( 'post_author', $post_id );
Se non si conosce ancora l'ID del post della pagina in cui ci si trova, allora dalla versione 3.1 di WP la cosa più semplice da fare è utilizzare la funzione get_queried_object_id()
(cercala nella lista dei Metodi) che funziona anche al di fuori del loop.
$post_id = get_queried_object_id();
Se questi metodi non funzionano per te, per favore fornisci una spiegazione più dettagliata di dove stai cercando di eseguire il tuo codice e vedremo se possiamo aiutarti ulteriormente.

Dipende da dove ti trovi. Se sei su una pagina singola (ad esempio, stai mostrando un singolo {{Insert Post Type Here}}), puoi usare get_queried_object
, che recupererà l'oggetto del post.
<?php
if (is_singular()) {
$author_id = get_queried_object()->post_author;
$address = get_the_author_meta('user_email', $author_id);
}
Se sei in qualsiasi altro luogo, potresti usare l'oggetto globale $wp_query
e controllare la sua proprietà $posts
. Questo dovrebbe funzionare anche su pagine singole.
<?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);
}
Puoi anche semplicemente "falsare" l'inizio del loop e riavvolgerlo per ottenere l'ID dell'autore. Questo non causerà ulteriori interrogazioni al database o simili. WordPress recupera tutti i post in una volta sola (al momento della scrittura). rewind_posts
semplicemente ripristina il post corrente (l'oggetto globale $post
) all'inizio dell'array. Lo svantaggio è che questo potrebbe far scattare l'azione loop_start
molto prima di quanto tu voglia — non è un grosso problema, solo qualcosa di cui essere consapevoli.
<?php
// assicurati di essere all'inizio.
rewind_posts();
// inizia il loop
the_post();
// ottieni ciò che ti serve
$address = get_the_author_meta('user_email');
// torna alla normalità
rewind_posts();

Sembra che questo funzioni al di fuori del loop, forse può essere utile.
$thelogin = get_query_var('author_name'); // Ottiene il nome dell'autore dalla query
$theauthor = get_userdatabylogin($thelogin); // Recupera i dati dell'utente tramite login
Puoi anche impostare manualmente l'ID del post e recuperarlo in questo modo:
global $wp_query; // Accede all'oggetto query globale
$thePostID = $wp_query->post->ID; // Ottiene l'ID del post corrente
$postdata = get_post($thePostID, ARRAY_A); // Recupera i dati del post come array associativo
$authorID = $postdata['post_author']; // Estrae l'ID dell'autore dal post
Sostituisci l'ID manualmente con l'ID del post per accedere ai dati al di fuori del loop.
Non sono soluzioni perfette, ma spero possano aiutare.

Ho avuto lo stesso problema qui quando cercavo di creare un widget che mostrasse i post in evidenza con le informazioni sull'autore.
Ho utilizzato alcuni suggerimenti dal secondo consiglio di @chrisguitarguy.
Il mio codice era così:
<?php
$count = 0;
$query_args = array(
'posts_per_page' => 5,
);
$com_query = new WP_Query( $query_args );
$feat_posts = $com_query->posts; // array, quindi possiamo accedere a ciascun post in base alla posizione
while ($com_query->have_posts()) {
$com_query->the_post();
$author_name= get_the_author_meta('user_nicename', $feat_posts[$count]->post_author);
$count++;
}

Spero che questo possa aiutare:
$args= array(
'post_type' =>'any',
'post_status' => 'publish',
'order' => 'ASC',
'posts_per_page' => '-1'
);
$posts = new WP_Query($args);
$posts = $posts->posts;
foreach($posts as $post) {
switch ($post->post_type) {
case 'page':
// ottieni l'id dell'autore tramite il post o la pagina
$id = get_post_field( 'post_author', $post->ID);
// il primo parametro è il nome dell'autore
// del post o della pagina e il secondo parametro
// è l'id con cui la funzione ottiene il nome dell'autore.
echo get_the_author_meta('display_name', $id);
break;
case 'post':
$id = get_post_field( 'post_author', $post->ID;
echo get_the_author_meta('display_name', $id);
}
}

Per ottenere l'ID dell'autore al di fuori del loop:
global $post;
$author_id = $post->post_author;
Quindi utilizzare
get_the_author_meta('field_name', $author_id)
ricorda che se stai recuperando gli ID dei post all'interno del loop e accedi all'autore al di fuori del loop, otterrai solo i dati dell'ultimo post ID nel loop

Perché non usi the_author_meta
<p>L'indirizzo email per l'utente con id 25 è <?php the_author_meta('user_email',25); ?></p>
Questa funzione può essere utilizzata all'interno del loop

Grazie, ma il problema è che sono fuori dal loop e non posso sistemarlo. Quando sei fuori dal loop, il secondo argomento ($author_id) deve essere fornito.
