Cum să obții ID-ul autorului în afara buclei WordPress

18 sept. 2012, 22:29:22
Vizualizări: 66.4K
Voturi: 19

Nu pot obține ID-ul autorului postării în afara buclei pentru a face funcția get_the_author_meta să funcționeze. Până acum am încercat diferite abordări:

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;

Am nevoie de ID-ul autorului pentru a-l transmite către:

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

Aveți sugestii?

1
Comentarii

verifică asta, la mine a funcționat.

Asaf Chertkoff Asaf Chertkoff
17 dec. 2012 19:47:31
Toate răspunsurile la întrebare 8
0
45

Cea mai simplă și directă modalitate de a obține ID-ul autorului unui post în afara loop-ului, dacă cunoști ID-ul postului, este să folosești funcția de bază din WordPress get_post_field().

$post_author_id = get_post_field( 'post_author', $post_id );

Dacă încă nu cunoști ID-ul postului paginii pe care te afli, atunci începând cu WP 3.1 cel mai simplu este să folosești funcția get_queried_object_id() (caută-o în lista de Metode) care funcționează chiar și în afara loop-ului.

$post_id = get_queried_object_id();

Dacă aceste metode nu funcționează pentru tine, te rugăm să oferi o explicație mai detaliată despre locul în care încerci să rulezi codul și vom încerca să te ajutăm mai departe.

3 oct. 2013 21:47:01
1
10

Iată cum poți obține ID-ul autorului în afara loop-ului WordPress:

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

Apoi poți folosi funcția the_author_meta:

<?php
the_author_meta( 'user_nicename', $author_id );
?>
26 dec. 2012 20:11:16
Comentarii

Această metodă funcționează excelent dacă ai acces la ID-ul postării. De asemenea, poți folosi get_the_author_meta('user_nicename', $author_id ) dacă nu dorești să afișezi valoarea imediat

Andrew M Andrew M
21 dec. 2016 11:44:41
0

Depinde de unde te afli. Dacă ești pe o pagină singulară (de ex. care afișează un singur {{Insert Post Type Here}}), poți folosi get_queried_object, care va prelua obiectul postării.

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

Dacă ești oriunde altundeva, poți folosi obiectul global $wp_query și să verifici proprietatea sa $posts. Acest lucru ar trebui să funcționeze și pe paginile singulare.

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

De asemenea, poți pur și simplu să "pornesc fals" bucla și să o dai înapoi pentru a obține ID-ul autorului. Acest lucru nu va genera nicio solicitare suplimentară către baza de date sau altele asemenea. WordPress preia toate postările deodată (la momentul scrierii). rewind_posts doar resetează postarea curentă (obiectul global $post) la începutul tabloului. Dezavantajul este că acest lucru poate declanșa acțiunea loop_start mult mai devreme decât ai nevoie - nu e o problemă mare, dar e bine să fii conștient de asta.

<?php
// asigură-te că ești la început.
rewind_posts();

// începe bucla
the_post();

// obține ce ai nevoie
$address = get_the_author_meta('user_email');

// înapoi la normal
rewind_posts();
26 dec. 2012 22:35:38
0

Se pare că acest lucru funcționează în afara buclei, poate te va ajuta.

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

De asemenea, poți seta manual ID-ul postului și să-l obții astfel:

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

Schimbă ID-ul manual cu ID-ul postului pentru acces în afara buclei.

Nu sunt soluții perfecte, dar sper că te ajută.

26 dec. 2012 21:42:03
0

Am avut aceeași problemă aici încercând să creez un widget care să afișeze postări recomandate cu informații despre autor.

Am folosit câteva indicii din al doilea sfat al lui @chrisguitarguy.

Codul meu arăta astfel:

<?php    

$count = 0;
$query_args = array(
      'posts_per_page' => 5,
     );
$com_query = new WP_Query( $query_args );

$feat_posts = $com_query->posts; // array, deci putem accesa fiecare post în funcție de poziție

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

Sper că acest lucru va ajuta:

$args= array(
    'post_type' =>'any', // orice tip de postare
    'post_status' => 'publish', // doar postări publicate
    'order' => 'ASC', // ordonare crescătoare
    'posts_per_page' => '-1' // afișează toate postările
);
$posts = new WP_Query($args);
$posts = $posts->posts;   

foreach($posts as $post) { 
  switch ($post->post_type) {
     case 'page': 
           // obține ID-ul autorului prin postare sau pagină
           $id = get_post_field( 'post_author', $post->ID);
           // primul parametru este numele autorului 
           // al postării sau paginii, iar al doilea parametru 
           // este ID-ul cu care funcția obține numele autorului.
           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 dec. 2019 06:12:54
0

Pentru a obține ID-ul autorului în afara loop-ului:

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

Apoi folosește

get_the_author_meta('nume_camp', $author_id)

Reține că dacă preiei ID-urile postărilor în loop și accesezi autorul în afara loop-ului, vei obține doar datele ultimei postări din loop.

28 dec. 2019 10:41:44
3
-2

De ce nu folosești the_author_meta

<p>Adresa de email pentru utilizatorul cu id-ul 25 este <?php the_author_meta('user_email',25); ?></p>

Aceasta poate fi folosită în interiorul loop-ului

19 sept. 2012 00:58:41
Comentarii

Mulțumesc, dar problema este că sunt în afara buclei și nu pot rezolva asta. Când ești în afara buclei, al doilea argument ($author_id) trebuie furnizat.

Marce Castro Marce Castro
19 sept. 2012 01:16:23

Bump! Aveți idei? Mă înnebunește :-/

Marce Castro Marce Castro
21 sept. 2012 21:41:42

în afara buclei - vă rugăm să notați întrebarea.

Christine Cooper Christine Cooper
26 dec. 2012 20:28:37