लूप के बाहर लेखक आईडी कैसे प्राप्त करें


16

मैं 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;

मुझे इसे पास करने के लिए लेखक आईडी की आवश्यकता है:

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

कोई सुझाव?


यह देखो , यह मेरे लिए काम किया।
आसफ चर्टकॉफ

जवाबों:


38

पोस्ट लेखक आईडी को लूप से बाहर निकालने का सबसे सरल और सरल तरीका, यदि आपको पोस्ट आईडी पता है, तो वर्डप्रेस कोर फ़ंक्शन का उपयोग करना है get_post_field()

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

यदि आप अभी तक उस पृष्ठ की पोस्ट आईडी को नहीं जानते हैं जो आप चालू हैं, तो WP 3.1 के बाद से सबसे आसान काम है इसका उपयोग get_queried_object_id()(तरीकों की सूची में इसके लिए देखें) फ़ंक्शन जो लूप के बाहर भी काम करता है।

$post_id = get_queried_object_id();

यदि ये आपके लिए काम नहीं करते हैं, तो कृपया अधिक विस्तृत विवरण दें जहां आप अपना कोड चलाने की कोशिश कर रहे हैं और हम देख सकते हैं कि क्या हम आगे मदद कर सकते हैं।


9

वर्डप्रेस लूप के बाहर लेखक आईडी कैसे प्राप्त करें और प्राप्त करें:

<?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) का भी उपयोग कर सकते हैं
एंड्रयू एम

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

आप लूप को केवल "झूठी शुरुआत" भी कर सकते हैं और लेखक आईडी को हथियाने के लिए इसे रिवाइंड कर सकते हैं। यह किसी भी अतिरिक्त डेटाबेस हिट या पसंद नहीं करेगा। वर्डप्रेस सभी पोस्ट को एक साथ (लिखने के समय) लाती है। सरणी की शुरुआत में 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);

आप मैन्युअल रूप से पोस्ट की आईडी भी सेट कर सकते हैं और इस तरह से पकड़ सकते हैं:

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

आईडी को लूप एक्सेस से मैन्युअल रूप से आईडी पोस्ट करने के लिए बदलें।

महान समाधान नहीं, लेकिन उम्मीद है कि यह मदद करता है।


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

लूप के बाहर लेखक आईडी प्राप्त करने और प्राप्त करने के लिए:

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

फिर उपयोग करें

get_the_author_meta('field_name', $author_id)

याद रखें यदि आप लूप में आईडी आईडी ला रहे हैं और साइड लूप से ऑथर को एक्सेस कर रहे हैं तो यह केवल लूप में अंतिम पोस्ट आईडी का डेटा प्रदान करेगा


0

उम्मीद है कि इस wil मदद:

$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

4
लूप के बाहर - कृपया प्रश्न पर ध्यान दें।
क्रिस्टीन कूपर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.