लूप के बाहर से सामग्री प्राप्त करें


22

क्या लूप के बाहर दूसरे से सामग्री प्राप्त करने का एक तरीका है? आईडी 302 है और मुझे उस सामग्री को दूसरे पृष्ठ पर प्रदर्शित करना होगा।


आईडी नहीं जानते? का उपयोग करें get_queried_object_id()! developer.wordpress.org/reference/classes/wp_query/…
jave.web

जवाबों:


39

आप किसी स्थैतिक पृष्ठ get_page()की $postवस्तु को लौटाने के लिए उपयोग कर सकते हैं :

$page_id = 302;
$page_object = get_page( $page_id );
echo $page_object->post_content;

संपादित करें

इसी तरह, आप किसी पोस्ट का ऑब्जेक्ट get_post()वापस करने के लिए उपयोग कर सकते हैं $post:

$post_id = 302;
$post_object = get_post( $post_id );
echo $post_object->post_content;

इसका उपयोग करते समय क्या शॉर्टकोड अभी भी काम करते हैं?
टिम बैस

बस पता चला कि यह नहीं है। setup_postdata( $post );पहले उपयोग करें , उसके बाद, आप उपयोग कर सकते हैंthe_content();
टिम बास

4
आप बस चला सकते हैंapply_filters( 'the_content', $post_object->post_content );
नाथन पावेल

6

लूप के बाहर की पोस्ट पाने के लिए आप कुछ इस तरह से लिख सकते हैं

global $post;
$content = $post->post_content;

if ( !empty( $content ) ) :
    echo $content;
endif;

3

यदि आपकी सामग्री में लघुकोड शामिल हैं, तो आपको उपयोग करना चाहिए:

$post_id = 22;        
$post_object = get_post( $post_id );        
echo do_shortcode( $post_object->post_content );


यह पृष्ठ यह do_shortcodeकहने के अलावा कि "यह धीमा हो सकता है" और "आप केवल उस फ़ंक्शन का उपयोग कर सकते हैं जो शॉर्ट कोड कॉल करता है।" वे कारण केवल सबसे सरल परिदृश्यों के लिए सबसे तुच्छ के लिए मान्य हैं। यह तब विफल हो जाता है जब शॉर्टकोड कहीं और उत्पन्न होता है, या यदि कई शॉर्टकोड, या शॉर्टकोड अन्य सामग्री और मार्कअप के साथ मिश्रित होते हैं। एक सम्मोहक कारण के बिना, मैं बयान से बचने के लिए असहमत हूँ do_shortcode। यह समय से पहले अनुकूलन की तरह बदबू आ रही है ।
जेफ

और यह आपके कोड और मूल शोर्ट कोड के बीच युग्मन को भी बढ़ाता है। यदि शोर्ट-बैकिंग पद्धति का कभी नाम बदला जाता है या हस्ताक्षर बदलते हैं, तो आपका कोड टूट जाएगा।
जेफ

1

संपूर्णता के लिए, ऊपर टिम की टिप्पणी पर निर्माण और स्टीफन हैरिस के लेख से प्रेरित , समाधान जो उपयोग करने में सक्षम बनाता the_content()है:

$post_id = 302;
global $post;
$post = get_post($post_id);
setup_postdata( $post );
the_content();
wp_reset_postdata( $post );

और इसलिए फ़िल्टर लागू होते हैं (पैराग्राफ सम्मिलित किए जाएंगे आदि) और शॉर्टकोड काम करते हैं।


यह लगभग मेरे ब्राउज़र को क्रैश कर गया: / एम्परसेंड को बाहर निकालने में मदद करता है, लेकिन यह अभी भी शॉर्टकोड पार्स नहीं कर रहा है।
जेड

0

जब से आप अपनी लक्ष्य पोस्ट आईडी (302) जानते हैं, आपको यह शॉर्टहैंड सिंटैक्स उपयोगी मिल सकता है जिसे आप लूप से बाहर कर सकते हैं (हालांकि इसका प्रदर्शन किसी भी अन्य वैकल्पिक विधि की तरह ही है :)

echo(get_post_field('post_content',302));

0

आप get_post_data()लूप के बाहर पोस्ट प्राप्त करने के लिए फ़ंक्शन का उपयोग कर सकते हैं । इस कोड को functions.php में रखें

function get_post_data($postId) {
    global $wpdb;
    return $wpdb->get_row("SELECT * FROM $wpdb->posts WHERE ID=$postId");
}

और फिर इस स्निपेट को प्रक्रिया पर अधिक नियंत्रण के लिए जोड़ दें

<?php $data = get_post_data(302);
    echo $data->post_date;     // post date
    echo $data->post_title;    // post title
    echo $data->post_content;  // post content
    echo $data->comment_count; // comments number
?>

0

आप, जैसा कि कहा जा सकता है, के साथ get_postऔर समाधान का उपयोग कर सकते हैं$post_object->post_content , लेकिन उस पोस्ट ऑब्जेक्ट का उपयोग करने से पहले एक चेक जोड़ना न भूलें:

function get_post_content( $post_id = null ) {
    $post_object = get_post( $post_id );
    if ( ! $post_object ) { return ''; }
    //else

    return apply_filters('the_content', $post_object->post_content);
}

echo get_post_content( $other_post_id );


-2

का उपयोग wp_reset_postdata();यह काम करेगा .. (संपादित)

<?php 
$args = array(
        'post_type' => 'posttype',
        'p' => 'post_id'
       );
$the_query = new WP_Query( $args );
if( have_posts() ) : while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
        <?php the_content(); ?>
    <?php endwhile; endif; 
wp_reset_postdata();
?>

पोस्ट टाइप "पोस्ट", "पेज" या आपका कस्टम पोस्ट प्रकार हो सकता है। यहाँ p = 302 आपकी पोस्ट आईडी है .. आशा है कि यह काम करेगा।


2
query_postsजब तक आपको पेज की कार्यक्षमता को तोड़ने की आवश्यकता न हो, तब तक कभी भी उपयोग न करें । हमेशा कस्टम क्वेरीज़ के लिए WP_Queryया उसका उपयोग करें get_posts:-)
Pieter

हाँ .. आप सही हैं .. यह Wp_Query के रूप में अच्छी तरह से हो सकता है .. एक ही परिणाम पाया ..
Jahirul इस्लाम Mamun

pre_get_postsफिल्टर भी है , और the_post। इतना विस्तार।
नाथन पॉवेल

-3

आप सामग्री को एक श्रेणी X में रख सकते हैं और इस तरह से पहले query_post का उपयोग कर सकते हैं:

    <?php query_posts('cat=X&showposts=1'); ?>
    <?php while (have_posts()) : the_post(); ?>
          <?= get_the_content(); ?>
    <?php endwhile; ?>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.