स्लग से कस्टम पोस्ट टाइप पोस्ट आईडी कैसे प्राप्त करें?


18

क्या कस्टम पोस्ट टाइप पोस्ट आईडी को सिर्फ स्लग से पकड़ना संभव है?

जितना मुझे पता है कि हम शीर्षक का उपयोग करके आईडी से प्राप्त कर सकते हैं। लेकिन कस्टम पोस्ट प्रकार में एक ही शीर्षक हो सकता है ताकि स्लग अद्वितीय हैं क्या यह संभव है ???

जवाबों:


40

आप उपयोग कर सकते हैं get_page_by_path()- नाम को मूर्ख मत बनने दो, तीसरा तर्क है पोस्ट टाइप:

if ( $post = get_page_by_path( 'the_slug', OBJECT, 'post_type' ) )
    $id = $post->ID;
else
    $id = 0;

7

यदि आप कुछ दिनों की प्रतीक्षा करते हैं, और Wordpress 4.4 में अपग्रेड करते हैं जो 8 दिसंबर ( AFAIK ) को जारी किया जाएगा , तो आप नए post_name__inपैरामीटर का उपयोग कर सकते हैं WP_Queryजिसमें स्लग की एक सरणी लेता है

उदाहरण

यदि आपको संपूर्ण पोस्ट ऑब्जेक्ट की आवश्यकता है

$args = [
    'post_type'      => 'my_custom_post_type',
    'posts_per_page' => 1,
    'post_name__in'  => ['post-slug']
];
$q = get_posts( $args );
var_dump( $q );

अगर आपको केवल आईडी की जरूरत है

$args = [
    'post_type'      => 'my_custom_post_type',
    'posts_per_page' => 1,
    'post_name__in'  => ['post-slug'],
    'fields'         => 'ids' 
];
$q = get_posts( $args );
var_dump( $q );

अच्छा है, लेकिन शायद स्लग द्वारा एक पोस्ट प्राप्त करने के लिए थोड़ा गहन है? उन्होंने उस सुविधा को क्यों जोड़ा !?
TheDeadMedic

1
@ TheDeadMedic ताकतवर थोड़ा गहन हो, हाँ, वास्तव में इस पर प्रदर्शन का परीक्षण नहीं किया है, बस एक विकल्प के रूप में जोड़ा गया; ;-)। क्यों, मैं वास्तव में नहीं जानता, उन अच्छी-से-अनावश्यक चीजों में से एक की तरह दिखता है जो वर्डप्रेस के लिए बहुत प्रसिद्ध है। नामकरण सम्मेलन, IMHO, post_nameसंपत्ति और category_nameपैरामीटर की तरह ही गलत भी है , जो होना चाहिए था slugऔर नहींname
पीटर 12:30

अच्छा :) वाह मेरे लिए वास्तव में इसका अच्छा अद्यतन :)
stlawrance

1
@ TheDeadMedic मेरी विधि और आपकी विधि के बीच कोई समय अंतर नहीं है। हम अपने प्रत्येक प्रश्न को चलाने के लिए लगातार 0.002 और 0.005 सेकंड के बीच मिलते हैं। साथ ही, दोनों विधियाँ केवल 1 क्वेरी से चलती हैं। ;-)
पीटरसन ने

1
@ TheDeadMedic मेरा सिर्फ यही मतलब था कि PHP के पास काम करने के लिए कम है - हाँ, पूरी तरह से सहमत हैं। विकल्पों को जानना हमेशा अच्छा होता है ( हालाँकि यह कभी-कभी सबसे अच्छा नहीं हो सकता है ) और कुछ प्रकार के बेंचमार्क होते हैं। आनंद लें ;-)
पीटरसन ने

5

अगर आप सिर्फ पोस्ट आईडी चाहते हैं तो यह एक लाइन में ट्रिक करेगा।

url_to_postid( site_url('the_slug') );

1
यह url_to_postidएक बहुत ही लचीला कार्य है: आप किसी भी प्रकार के पर्मलिंक / पूर्ण URL में पास कर सकते हैं और उस URL के लिए सबसे सटीक पोस्ट-आईडी प्राप्त कर सकते हैं। हालाँकि, लचीले उपयोग के कारण यह काफी धीमा है (बहुत से समापन बिंदुओं / पोस्ट-प्रकारों के साथ)। यदि आप केवल एक विशिष्ट पोस्ट प्रकार के लिए एक स्लग में गुजरते हैं, तो यह उपयोग करने के लिए बहुत तेज़ हैget_page_by_path()
फिलिप
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.