วิธีรับ ID ผู้แต่งนอกวง


16

ฉันไม่สามารถรับ ID ผู้เขียนโพสต์นอกวงเพื่อให้ get_the_author_meta ทำงาน จนถึงตอนนี้ฉันได้ลองแนวทางที่แตกต่าง:

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;

ฉันต้องการ ID ผู้แต่งเพื่อส่งต่อไปยัง:

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

ข้อเสนอแนะใด ๆ


ลองดูนี่ใช้ได้กับฉัน
Asaf Chertkoff

คำตอบ:


38

get_post_field()วิธีที่ง่ายและตรงไปตรงมามากที่สุดที่จะได้รับรหัสการโพสต์ผู้เขียนนอกห่วงถ้าคุณรู้รหัสการโพสต์คือการใช้ฟังก์ชั่น WordPress หลัก

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

หากคุณยังไม่ทราบรหัสประจำตัวของหน้าเว็บที่คุณอยู่ดังนั้นตั้งแต่ WP 3.1 สิ่งที่ง่ายที่สุดที่จะทำคือใช้get_queried_object_id()ฟังก์ชัน (ค้นหาในรายการวิธีการ) ซึ่งใช้งานได้แม้อยู่นอกวง

$post_id = get_queried_object_id();

หากสิ่งเหล่านี้ไม่ได้ผลสำหรับคุณโปรดให้คำอธิบายโดยละเอียดเพิ่มเติมว่าคุณกำลังพยายามเรียกใช้รหัสของคุณจากที่ใดและเราสามารถดูว่าเราสามารถช่วยเพิ่มเติมได้หรือไม่


9

ต่อไปนี้เป็นวิธีขอรับและรับ ID ผู้แต่งนอกวนลูป:

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

จากนั้นเป็นไปได้สำหรับเราthe_author_meta:

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

วิธีนี้ใช้งานได้ดีถ้าคุณเข้าถึงรหัสโพสต์ คุณยังสามารถใช้ get_the_author_meta ('user_nicename', $ author_id) หากคุณไม่ต้องการที่จะส่งออกค่าทันที
Andrew M

3

ขึ้นอยู่กับว่าคุณอยู่ที่ไหน หากคุณอยู่ในหน้าเอกพจน์ (เช่นแสดงเพียง {{แทรกประเภทโพสต์ที่นี่}}) คุณสามารถใช้get_queried_objectซึ่งจะดึงข้อมูลวัตถุโพสต์

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

หากคุณอยู่ที่อื่นคุณสามารถใช้$wp_queryวัตถุส่วนกลางและตรวจสอบ$postsคุณสมบัติของวัตถุนั้น สิ่งนี้ควรใช้กับหน้าเอกพจน์เช่นกัน

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

คุณสามารถเพียงแค่ "เริ่มต้นผิด" วนซ้ำและย้อนกลับเพื่อจับ ID ผู้แต่ง สิ่งนี้จะไม่ทำให้เกิดความนิยมของฐานข้อมูลเพิ่มเติมหรือสิ่งที่คล้ายกัน WordPress เรียกโพสต์ทั้งหมดในครั้งเดียว (ในขณะที่เขียน) rewind_postsเพียงรีเซ็ตวัตถุโพสต์ปัจจุบัน (โกลบอล$post) เป็นจุดเริ่มต้นของอาร์เรย์ ข้อเสียคือสิ่งนี้อาจทำให้loop_startแอ็คชั่นยิงเร็วกว่าที่คุณต้องการ - ไม่ใช่เรื่องใหญ่อะไรบางอย่างที่ต้องระวัง

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

ดูเหมือนว่าจะทำงานนอกวงอาจจะช่วยได้

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

คุณสามารถตั้งค่า ID ของโพสต์ด้วยตนเองและคว้าวิธีนี้

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

เปลี่ยน ID ออกเป็น post id ด้วยตนเองเพื่อไม่ให้เข้าถึงแบบวนซ้ำ

ไม่ใช่วิธีแก้ปัญหาที่ยอดเยี่ยม แต่หวังว่ามันจะช่วยได้


0

ฉันมีปัญหาเดียวกันที่นี่เมื่อพยายามสร้างวิดเจ็ตที่แสดงบทความเด่นพร้อมข้อมูลผู้แต่ง

ฉันใช้คำใบ้บางคำจาก @chrisguitarguy เคล็ดลับที่ 2

รหัสของฉันดูเหมือนว่านี้:

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

ในการรับและรับ ID ผู้แต่งนอกวง:

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

จากนั้นใช้

get_the_author_meta('field_name', $author_id)

จำไว้ว่าถ้าคุณดึงข้อมูลโพสต์ id ในลูปและการเข้าถึงลูปของผู้เขียนด้านนอกมันจะให้ข้อมูลของโพสต์ id ล่าสุดในลูปเท่านั้น


0

หวังว่านี่จะช่วยได้:

$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

ทำไมคุณไม่ใช้the_author_meta

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

สามารถใช้ภายในลูป


ขอบคุณ แต่ปัญหาคือฉันอยู่นอกวงและไม่สามารถแก้ไขได้ เมื่อคุณอยู่นอกวงจะต้องระบุอาร์กิวเมนต์ที่สอง ($ author_id)
Marce Castro

Bump! ความคิดใด ๆ มันทำให้ฉันบ้า: - /
Marce Castro

4
นอกวง - โปรดบันทึกคำถาม
Christine Cooper
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.