Cách lấy ID tác giả ngoài vòng lặp


16

Tôi không thể lấy ID tác giả bài viết bên ngoài vòng lặp để làm cho get_the_ Author_meta hoạt động. Cho đến nay tôi đã thử các cách tiếp cận khác nhau:

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;

Tôi cần ID tác giả để chuyển nó tới:

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

Bất kỳ đề xuất?


kiểm tra này , điều này làm việc cho tôi
Asaf Chertkoff

Câu trả lời:


38

Cách đơn giản nhất và đơn giản nhất để có được ID tác giả bài viết bên ngoài vòng lặp, nếu bạn biết ID bài đăng, là sử dụng chức năng cốt lõi của WordPress get_post_field().

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

Nếu bạn chưa biết ID bài đăng của trang bạn đang truy cập, thì vì WP 3.1, điều dễ làm nhất là sử dụng hàm get_queried_object_id()(tìm trong danh sách Phương thức) hoạt động ngay cả ngoài vòng lặp.

$post_id = get_queried_object_id();

Nếu những điều này không làm việc cho bạn thì xin vui lòng giải thích chi tiết hơn về nơi bạn đang cố chạy mã của mình và chúng tôi có thể xem liệu chúng tôi có thể giúp thêm không.


9

Dưới đây là cách lấy và lấy ID tác giả bên ngoài vòng lặp WordPress:

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

Sau đó, nó có thể cho chúng tôi the_author_meta:

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

Điều này hoạt động rất tốt nếu bạn có quyền truy cập vào ID bài. Bạn cũng có thể sử dụng get_the_ Author_meta ('user_nicename', $ Author_id) nếu bạn không muốn xuất giá trị ngay lập tức
Andrew M

3

Phụ thuộc vào bạn đang ở đâu. Nếu bạn đang ở trên một trang số ít (ví dụ: chỉ hiển thị một {{Chèn loại bài đăng ở đây}}), bạn có thể sử dụng get_queried_object, nó sẽ tìm nạp đối tượng bài đăng.

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

Nếu bạn ở bất cứ nơi nào khác, bạn có thể sử dụng $wp_queryđối tượng toàn cầu và kiểm tra thuộc tính của nó $posts. Điều này nên làm việc trên các trang số ít là tốt.

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

Bạn cũng có thể chỉ "bắt đầu sai" vòng lặp và tua lại để lấy ID tác giả. Điều này sẽ không phát sinh bất kỳ lần truy cập cơ sở dữ liệu bổ sung hoặc tương tự. WordPress tìm nạp tất cả các bài viết cùng một lúc (tại thời điểm viết bài). rewind_postschỉ đặt lại $postđối tượng bài hiện tại (toàn cầu ) về đầu mảng. Nhược điểm là điều này có thể khiến loop_starthành động phát hỏa sớm hơn bạn muốn - không phải là một vấn đề lớn, chỉ là điều cần lưu ý.

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

Điều này có vẻ như nó hoạt động bên ngoài vòng lặp, có thể điều này sẽ giúp.

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

Bạn cũng có thể tự đặt ID bài đăng và lấy theo cách này:

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

Thay đổi ID ra để đăng id thủ công để thoát khỏi vòng truy cập.

Không phải là giải pháp tuyệt vời, nhưng hy vọng nó sẽ giúp.


0

Tôi gặp vấn đề tương tự ở đây khi cố gắng tạo một widget hiển thị các bài đăng nổi bật với thông tin tác giả.

Tôi đã sử dụng một số gợi ý từ mẹo thứ 2 của @chrisguitarguy.

Mã của tôi trông như thế này:

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

Để lấy và lấy ID tác giả bên ngoài vòng lặp:

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

Sau đó sử dụng

get_the_author_meta('field_name', $author_id)

hãy nhớ nếu bạn đang tìm nạp id bài viết trong vòng lặp và truy cập vòng lặp bên ngoài của tác giả thì nó sẽ chỉ cung cấp dữ liệu của id bài đăng cuối cùng trong vòng lặp


0

Hy vọng điều này sẽ giúp:

$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

Tại sao bạn không sử dụng the_master_meta

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

Điều này có thể được sử dụng trong vòng lặp


Cảm ơn, nhưng vấn đề là tôi ở ngoài vòng lặp và không thể khắc phục điều đó. Khi bạn ở ngoài vòng lặp, đối số thứ hai ($ Author_id) cần được cung cấp.
Marce Fidel

Băng! Có ý kiến ​​gì không? Nó làm tôi phát điên: - /
Marce Castro

4
bên ngoài vòng lặp - xin lưu ý câu hỏi.
Christine Cooper
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.