Come ottenere l'ID autore al di fuori del ciclo


16

Non riesco a ottenere l'ID autore del post al di fuori del ciclo 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 autore per trasmetterlo a:

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

Eventuali suggerimenti?


guarda questo , ha funzionato per me.
Asaf Chertkoff,

Risposte:


38

Il modo più semplice e diretto per ottenere l'ID autore del post al di fuori del ciclo, se si conosce l'ID 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, dal WP 3.1 la cosa più semplice da fare è utilizzare la funzione get_queried_object_id()(cercarlo nell'elenco dei metodi) che funziona anche al di fuori del ciclo.

$post_id = get_queried_object_id();

Se questi non funzionano per te, ti preghiamo di fornire una spiegazione più dettagliata di dove stai cercando di eseguire il tuo codice e possiamo vedere se possiamo aiutarti ulteriormente.


9

Ecco come ottenere e ottenere l'ID autore al di fuori del ciclo di WordPress:

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

Quindi è possibile per noi the_author_meta:

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

Funziona benissimo se hai accesso all'ID post. Puoi anche usare get_the_author_meta ('user_nicename', $ author_id) se non vuoi produrre immediatamente il valore
Andrew M

3

Dipende dove sei. Se ti trovi su una pagina singolare (ad es. Mostrando solo un singolo {{Inserisci il tipo di post qui}}), 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 altrove, puoi utilizzare l' $wp_queryoggetto globale e verificarne la $postsproprietà. Questo dovrebbe funzionare anche su pagine singolari.

<?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 "falsificare l'avvio" del ciclo e riavvolgerlo per afferrare l'ID autore. Ciò non comporterà ulteriori accessi al database o simili. WordPress recupera tutti i post contemporaneamente (al momento della scrittura). rewind_postsreimposta l'oggetto post corrente (globale $post) all'inizio dell'array. Il rovescio della medaglia è che questo può causare l' loop_startazione di sparare molto prima di quanto si desideri - non un grosso problema, solo qualcosa di cui essere consapevoli.

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

2

Sembra che funzioni al di fuori del ciclo, forse questo aiuterà.

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

Puoi anche impostare manualmente l'ID del post e afferrarlo in questo modo:

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

Cambia ID per pubblicare manualmente l'ID per l'accesso fuori dal ciclo.

Non grandi soluzioni, ma si spera che aiuti.


0

Ho avuto lo stesso problema qui quando ho provato a creare un widget che mostrava i post in primo piano con informazioni sull'autore.

Ho usato alcuni dei suggerimenti del secondo suggerimento di @chrisguitarguy.

Il mio codice era simile al seguente:

<?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

Per ottenere e ottenere l'ID autore al di fuori del ciclo:

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

Quindi utilizzare

get_the_author_meta('field_name', $author_id)

ricorda che se stai recuperando l'ID post nel ciclo e accedendo al loop laterale dell'autore, fornirà solo i dati dell'ultimo ID post nel ciclo


0

Speriamo 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': 
           // get the author's id through the post or page
           $id = get_post_field( 'post_author', $post->ID);
           // the first parameter is the name of the author 
           // of the post or page and the second parameter 
           // is the id with which the function obtains the name of the author.
           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);
  }
}

-2

Perché non usi the_author_meta

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

Questo può essere usato all'interno del loop


Grazie, ma il problema è che sono fuori dal giro e non posso risolverlo. Quando sei fuori dal ciclo, devi fornire il secondo argomento ($ author_id).
Marce Castro,

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

4
al di fuori del ciclo - si prega di notare la domanda.
Christine Cooper
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.