वर्डप्रेस क्वेरी सिंगल पोस्ट स्लग द्वारा


85

उस समय के लिए जब मैं एक लूप का उपयोग किए बिना एक ही पोस्ट दिखाना चाहता / चाहती हूं:

<?php
$post_id = 54;
$queried_post = get_post($post_id);
echo $queried_post->post_title; ?>

समस्या यह है कि जब मैं साइट को स्थानांतरित करता हूं, तो आईडी का आमतौर पर बदल जाता है। क्या स्लग द्वारा इस पोस्ट को क्वेरी करने का कोई तरीका है?


3
साइट चलते समय आईडी क्यों बदलेंगे? जब तक आप WP के आयात / निर्यात सुविधा (जो बहुत विश्वसनीय नहीं है और मैं टालने की सलाह दूंगा) का उपयोग करके साइट को स्थानांतरित कर रहा हूं। यदि आप बस डेटाबेस को स्थानांतरित कर रहे हैं तो कुछ भी नहीं बदलेगा।
एननुई

जवाबों:


119

वर्डप्रेस कोडेक्स से:

<?php
$the_slug = 'my_slug';
$args = array(
  'name'        => $the_slug,
  'post_type'   => 'post',
  'post_status' => 'publish',
  'numberposts' => 1
);
$my_posts = get_posts($args);
if( $my_posts ) :
  echo 'ID on the first post found ' . $my_posts[0]->ID;
endif;
?>

वर्डप्रेस कोडेक्स पोस्ट प्राप्त करें


1
यह ID - $ my_posts [0] -> ID दिखाता है; - लेकिन मैं पृष्ठों की सामग्री कैसे प्रदर्शित करूं? मैं सब कुछ करने की कोशिश की है और कुछ भी नहीं काम करता है!
जेम्स विल्सन

1
@JamesWilson kint का उपयोग शुरू करते हैं। echo $my_posts[0]->post_content
टॉस्कन

ऐसा लगता है कि कई वापस आए, और इस तरह अस्पष्ट, परिणाम अगर कुछ स्लग काफी समान हैं (जैसे 'काम' बनाम 'काम')
साइमन एच

2
यकीन नहीं हो रहा है, लेकिन मुझे इस क्वेरी के लिए 'नाम' को 'पोस्ट_नाम' में बदलना पड़ा
माइक

यह विशेष रुप से प्रदर्शित छवि $ करतब दिखाने के लिए काम करता है = wp_get_attachment_url (get_post_thumbnail_id ($ my_posts [0] -> ID));
ओमर

68

कैसा रहेगा?

<?php
   $queried_post = get_page_by_path('my_slug',OBJECT,'post');
?>

9
बच्चों के पृष्ठों या पदानुक्रमित कस्टम पोस्ट प्रकारों पर ध्यान दें: my-slugबन जाना चाहिए my-parent-slug/my-slug: codex.wordpress.org/Function_Reference/…
Erenor Paz

2
इस पोस्ट को पढ़ने के बाद से मेरा अनुभव @Erenor Paz का समर्थन करता है - यह वास्तव में सुंदर और सरल हो सकता है लेकिन यह तब जटिल हो जाता है जब आप स्लग की निरंतरता पर निर्भर होते हैं - जो कि मूल पोस्ट को बदलकर बदल सकता है ... आह - शायद हम मार्ग में वाइल्डकार्ड की अनुमति देने के लिए वर्डप्रेस devs को समझा सकता है, उदाहरण: get_page_by_path ('* / my_slug');
अप्रतिम

बहुत विश्वसनीय नहीं
अमीन

7

एक कम महंगी और पुन: प्रयोज्य विधि

function get_post_id_by_name( $post_name, $post_type = 'post' )
{
    $post_ids = get_posts(array
    (
        'post_name'   => $post_name,
        'post_type'   => $post_type,
        'numberposts' => 1,
        'fields' => 'ids'
    ));

    return array_shift( $post_ids );
}

6

जैसा कि wordpress api बदल गया है, आप get_posts का उपयोग परम 'post_name' के साथ कर सकते हैं। Ive संशोधित Maartens थोड़ा काम करता है:

function get_post_id_by_slug( $slug, $post_type = "post" ) {
    $query = new WP_Query(
        array(
            'name'   => $slug,
            'post_type'   => $post_type,
            'numberposts' => 1,
            'fields'      => 'ids',
        ) );
    $posts = $query->get_posts();
    return array_shift( $posts );
}

अतिरिक्त प्रदर्शन के लिए मैं 'no_found_rows' => trueget_posts तर्कों में भी शामिल करूँगा।
फिलीपींस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.