Come ottenere l'ID dell'Autore fuori dal loop

18 set 2012, 22:29:22
Visualizzazioni: 66.4K
Voti: 19

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?

1
Commenti

dai un'occhiata a questo, ha funzionato per me.

Asaf Chertkoff Asaf Chertkoff
17 dic 2012 19:47:31
Tutte le risposte alla domanda 8
0
45

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.

3 ott 2013 21:47:01
1
10

Ecco come ottenere l'ID dell'autore al di fuori del loop di WordPress:

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

Successivamente è possibile utilizzare the_author_meta:

<?php
the_author_meta( 'user_nicename', $author_id );
?>
26 dic 2012 20:11:16
Commenti

Funziona perfettamente se hai accesso all'ID del post. Puoi anche usare get_the_author_meta('user_nicename', $author_id ) se non vuoi visualizzare direttamente il valore

Andrew M Andrew M
21 dic 2016 11:44:41
0

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();
26 dic 2012 22:35:38
0

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.

26 dic 2012 21:42:03
0

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++;
}
9 apr 2014 22:03:03
0

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);
  }
}
28 dic 2019 06:12:54
0

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

28 dic 2019 10:41:44
3
-2

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

19 set 2012 00:58:41
Commenti

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.

Marce Castro Marce Castro
19 set 2012 01:16:23

Bump! Qualche idea? Mi sta facendo impazzire :-/

Marce Castro Marce Castro
21 set 2012 21:41:42

fuori dal loop - per favore nota la domanda.

Christine Cooper Christine Cooper
26 dic 2012 20:28:37