Yazar Kimliğini döngü dışında tutma


16

Get_the_author_meta çalışması için yazı yazar kimliğini döngü dışında alamıyorum. Şimdiye kadar farklı yaklaşımlar denedim:

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;

Bunu aktarmak için yazar kimliğine ihtiyacım var:

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

Herhangi bir öneri?


şuna bir bak , bu benim için çalıştı.
Asaf Chertkoff

Yanıtlar:


38

Posta kimliğini biliyorsanız, yazı yazar kimliğini döngü dışında almanın en basit ve en basit yolu WordPress çekirdek işlevini kullanmaktır get_post_field().

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

Bulunduğunuz sayfanın posta kimliğini henüz bilmiyorsanız, WP 3.1'den bu yana yapılacak en kolay şey get_queried_object_id(), döngünün dışında bile çalışan (Yöntemler listesinde arayın) işlevini kullanmaktır.

$post_id = get_queried_object_id();

Bunlar sizin için işe yaramazsa, lütfen kodunuzu nerede çalıştırmaya çalıştığınız hakkında daha ayrıntılı bir açıklama yapın ve daha fazla yardım edip edemeyeceğimizi görebiliriz.


9

WordPress döngüsü dışında yazar kimliğini nasıl edineceğiniz ve edinebileceğiniz aşağıda açıklanmıştır:

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

O zaman bizim için mümkün the_author_meta:

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

Posta kimliğine erişiminiz varsa bu harika çalışır. Değerin hemen çıktısını almak istemiyorsanız get_the_author_meta ('user_nicename', $ author_id) öğesini de kullanabilirsiniz
Andrew M

3

Nerede olduğuna göre değişir. Tek bir sayfadaysanız (örneğin, yalnızca tek bir {{Yazı Türünü Buraya Ekle}} gösteriyorsa), get_queried_objectyazı nesnesini getirecek olan kullanabilirsiniz .

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

Başka bir yerdeyseniz, global $wp_querynesneyi kullanabilir ve $postsözelliğini kontrol edebilirsiniz . Bu, tekil sayfalarda da çalışmalıdır.

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

Ayrıca döngüyü "yanlış başlatabilir" ve yazar kimliğini almak için geri sarabilirsiniz. Bu, herhangi bir ek veritabanı isabetine veya benzerine neden olmayacaktır. WordPress tüm yayınları bir kerede (yazma sırasında) getirir. rewind_postsgeçerli yazı (global $post) nesnesini dizinin başına sıfırlar . Dezavantajı, bu, loop_starteylemin istediğinizden daha erken patlamasına neden olabilir - büyük bir anlaşma değil, sadece farkında olması gereken bir şey.

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

Bu döngü dışında çalışıyor gibi görünüyor, belki bu yardımcı olacaktır.

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

Ayrıca gönderi kimliğini manuel olarak ayarlayabilir ve şu şekilde yakalayabilirsiniz:

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

Döngü dışı erişim için ID çıkışını manüel olarak değiştirmek için değiştirin.

Harika çözümler değil, ama umarım yardımcı olur.


0

Yazar bilgileri ile özellikli mesajlar görüntülenen bir widget yapmaya çalışırken burada da aynı sorunu vardı.

Bazı ipuçlarını @chrisguitarguy 2. ipucundan kullandım.

Kodum şöyle görünüyordu:

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

Yazar kimliğini döngü dışında almak ve almak için:

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

Sonra kullan

get_the_author_meta('field_name', $author_id)

döngüdeki gönderiler kimliğini alıyorsanız ve yazarın yan döngüye erişiyorsanız, yalnızca döngüdeki son gönderi kimliğinin verilerini sağlayacaktır


0

Umarım bu yardım eder:

$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

Neden the_author_meta kullanmıyorsun

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

Bu döngü içinde kullanılabilir


Teşekkürler, ama sorun ben döngü dışında ve bunu düzeltemiyorum. Döngünün dışında olduğunuzda, ikinci argümanın ($ author_id) sağlanması gerekir.
Marce Castro

Çarpmak! Herhangi bir fikir? Beni delirtiyor: - /
Marce Castro

4
döngü dışında - lütfen soruyu not edin.
Christine Cooper
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.