Jak uzyskać identyfikator autora poza pętlą

16

Nie mogę pobrać identyfikatora autora postu poza pętlę, aby funkcja get_the_author_meta działała. Do tej pory próbowałem różnych podejść:

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;

Potrzebuję ID autora, aby przekazać go:

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

Jakieś sugestie?

Marce Castro
źródło
sprawdź to , to zadziałało dla mnie.
Asaf Chertkoff,

Odpowiedzi:

38

Najprostszym i najprostszym sposobem na wyprowadzenie ID autora posta poza pętlę, jeśli znasz ID posta, jest użycie podstawowej funkcji WordPress get_post_field().

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

Jeśli nie znasz jeszcze identyfikatora postu strony, na której jesteś, to od WP 3.1 najłatwiej jest skorzystać z funkcji get_queried_object_id()(poszukaj jej na liście metod), która działa nawet poza pętlą.

$post_id = get_queried_object_id();

Jeśli nie działają one dla Ciebie, podaj bardziej szczegółowe wyjaśnienie, gdzie próbujesz uruchomić swój kod, a my możemy zobaczyć, czy możemy jeszcze pomóc.

Max GJ Panas
źródło
9

Oto jak uzyskać i uzyskać identyfikator autora poza pętlą WordPress:

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

Możliwe jest dla nas the_author_meta:

<?php
the_author_meta( 'user_nicename', $author_id );
?>
Aleksander Posławski
źródło
Działa to świetnie, jeśli masz dostęp do identyfikatora postu. Możesz także użyć get_the_author_meta ('nazwa_użytkownika', $ autor_id), jeśli nie chcesz od razu wyświetlać wartości
Andrew M
3

Zależy gdzie jesteś. Jeśli jesteś na pojedynczej stronie (np. Pokazujesz tylko jeden {{Wstaw tutaj typ postu}}), możesz użyć get_queried_object, który pobierze obiekt postu.

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

Jeśli jesteś gdziekolwiek indziej, możesz użyć $wp_queryobiektu globalnego i sprawdzić jego $postswłaściwość. Powinno to również działać na pojedynczych stronach.

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

Możesz także po prostu „fałszywie uruchomić” pętlę i przewinąć ją do tyłu, aby pobrać identyfikator autora. Nie spowoduje to żadnych dodatkowych trafień w bazie danych itp. WordPress pobiera wszystkie posty naraz (w momencie pisania). rewind_postspo prostu resetuje bieżący obiekt postu (globalny $post) na początek tablicy. Minusem jest to, że może to spowodować, że loop_startakcja zacznie strzelać wcześniej niż chcesz - nie jest to wielka sprawa, po prostu coś, o czym należy pamiętać.

<?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();
chrisguitarguy
źródło
2

Wygląda na to, że działa poza pętlą, może to pomoże.

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

Możesz także ręcznie ustawić identyfikator posta i pobrać w ten sposób:

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

Zmień ID na, aby ręcznie wysłać identyfikator dla dostępu poza pętlą.

Nie świetne rozwiązania, ale mam nadzieję, że to pomaga.

Ryan Dennler
źródło
0

Miałem ten sam problem, gdy próbowałem utworzyć widżet, który wyświetlałby polecane posty z informacjami o autorze.

Skorzystałem z niektórych wskazówek z 2. wskazówki @chrisguitarguy.

Mój kod wyglądał tak:

<?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++;
}
Richard Dinh
źródło
0

Aby uzyskać i pobrać identyfikator autora poza pętlą:

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

Następnie użyj

get_the_author_meta('field_name', $author_id)

pamiętaj, jeśli pobierasz identyfikatory postów w pętli i uzyskujesz dostęp do zewnętrznej pętli autora, to dostarczy tylko dane ostatniego identyfikatora postu w pętli

Manish Chaubey
źródło
0

Mam nadzieję, że to pomoże:

$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);
  }
}
Alejandro Jose Velasquez Valle
źródło
-2

Dlaczego nie użyjesz metody_autora?

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

Można tego użyć w pętli

Kuldeep Daftary
źródło
Dzięki, ale problem polega na tym, że jestem poza pętlą i nie mogę tego naprawić. Kiedy jesteś poza pętlą, musisz podać drugi argument ($ autor_id).
Marce Castro,
Guz! Jakieś pomysły? Doprowadza mnie to do szału: - /
Marce Castro
4
poza pętlą - zwróć uwagę na pytanie.
Christine Cooper