किसी भी पोस्ट की स्थिति के साथ सभी पोस्ट कैसे प्राप्त करें?


38

मैं एक फ्रंट एंड डैशबोर्ड बना रहा हूं जहां मुझे वर्तमान उपयोगकर्ता द्वारा सभी पोस्ट दिखाने की आवश्यकता है। इसलिए, मुझे मुख्य रूप publishedसे trashedऔर सभी राज्यों में पोस्ट दिखाने की आवश्यकता है pending। मैं अब एक साधारण क्वेरी का उपयोग कर रहा हूं, लेकिन यह केवल प्रकाशित पदों को वापस कर रहा है।

$query = array(
    'post_type' => 'my-post-type',
    'post_author' => $current_user->ID              
    );
    query_posts($query);

क्या कोई मदद कर सकता है? मुझे और क्या करने की जरूरत है?


4
क्या आपने post_statusपैरामीटर का उपयोग करने की कोशिश की है , अर्थात। 'post_status' => 'any'?
t31os

2
मैं दृढ़ता सेWP_Query pre_get_posts या get_postsइसके बजाय का उपयोग करने की सलाह देता हूं query_posts। कभी उपयोगquery_posts
टॉम जम्मू नॉवेल

@TomJNowell: कि जिस तरह से वापस था :) मैं WP_Query का उपयोग सबसे ofter अब ..
शिशिर

1
@ शिशिर सावधान रहें, WP_Queryफ्रंट-एंड के लिए उपयोग करें , और get_postsव्यवस्थापक प्रश्नों के लिए , जैसा कि एक मुद्दा है wp_reset_postdata( नोट और इस मुद्दे पर टिकट देखें )।
अरोवरता

जवाबों:


65

आप पोस्ट_स्टैटस पैरामीटर का उपयोग कर सकते हैं:

* 'publish' - a published post or page
* 'pending' - post is pending review
* 'draft' - a post in draft status
* 'auto-draft' - a newly created post, with no content
* 'future' - a post to publish in the future
* 'private' - not visible to users who are not logged in
* 'inherit' - a revision. see get_children.
* 'trash' - post is in trashbin. added with Version 2.9. 

मुझे यकीन नहीं है कि यह 'किसी भी' को स्वीकार करता है इसलिए सभी प्रकार के उपयोग और सरणी को आप चाहते हैं:

$query = array(
    'post_type' => 'my-post-type',
    'post_author' => $current_user->ID,
    'post_status' => array('publish', 'pending', 'draft', 'auto-draft', 'future', 'private', 'inherit', 'trash')    
);
$loop = new WP_Query($query);

while ( $loop->have_posts() ) : $loop->the_post();

7
आप get_post_stati()कस्टम सहित सभी स्थितियों को प्राप्त करने के लिए भी उपयोग कर सकते हैं।
fuxia

5
एक बंद को मारने के लिए एक व्यर्थ अवसर query_postsकॉल ...
टॉम जम्मू नॉवेल

बहुत बुरा हम इस तरह से कुछ भी नहीं कर सकते हैं 'post_status' => array( '!inherit' );(विरासत के अलावा किसी भी पोस्ट_स्टैटस को इंगित करने के लिए)
aequalsb

@aequalsb किस बारे में'post_status' => array_diff(get_post_stati(), ['inherit']);
चेसलैब

9

सरल तरीका है, किसी भी स्थिति के साथ सभी पोस्ट कैसे प्राप्त करें:

$articles = get_posts(
 array(
  'numberposts' => -1,
  'post_status' => 'any',
  'post_type' => get_post_types('', 'names'),
 )
);

अब आप सभी पदों पर पुनरावृति कर सकते हैं:

foreach ($articles as $article) { 
 echo $article->ID . PHP_EOL; //...
}

2
वर्डप्रेस के स्वयं के चर नामों के साथ $ पोस्ट और $ पोस्ट संघर्ष । यदि आप इस कोड का उपयोग प्राथमिक (मुख्य सामग्री) डिव के अलावा किसी और चीज़ में करने के लिए कर रहे हैं, तो इससे यह पता चलेगा कि मुख्य में क्या दिखाया गया है। यदि आपका इरादा वास्तव में मूल क्वेरी परिणामों को पूरी तरह से बदलना है, तो यह वही है, जो आप चाहते हैं। लेकिन अभी भी $ पोस्ट और $ पोस्ट चर का नाम बदलना एक अच्छा विचार है।
हेनरिक एर्लडसन

5
@ हेनरिक मैं आपकी टिप्पणी को कम करने का इरादा नहीं कर रहा हूं (आपका तर्क ध्वनि और सुरक्षित है), लेकिन मैं $ पोस्ट / $ पोस्ट का उपयोग वैश्विक $ पोस्ट / $ पोस्ट वेरिएबल्स तक पहुंच के बिना एक फ़ंक्शन के अंदर पूरी तरह से स्वीकार्य मानता हूं - क्योंकि यह मुझे विकास के दौरान तर्क को बनाए रखने में मदद करता है।
अप्रैल को असाल्सब

6

WP_Queryवर्ग विधि ->query()एक को स्वीकार करता है anyके लिए तर्क post_statuswp_get_associated_nav_menu_items()एक प्रमाण के लिए देखें ।

वही जाता है get_posts()(जो उपरोक्त कॉल के लिए सिर्फ एक आवरण है)।


3
WP_Query डॉक्स से: 'कोई' - पोस्ट के प्रकारों को छोड़कर किसी भी स्थिति को पुनः प्राप्त करता है, जिसमें 'बहिष्कृत_सर्च' सेट सही है। (वहां एक टाइपो है, वे वास्तव में पोस्ट प्रकारों के बजाय पोस्ट स्टेटस का मतलब है।) इसका मतलब स्टेटस हैं auto-draftऔर trashबाहर रखा गया है।
तामलिन

@Tamlyn Afaik, यह कोई टाइपो नहीं है। यह पोस्ट प्रकार से किसी भी स्थिति को पुनर्प्राप्त करता है जो सार्वजनिक रूप से उपलब्ध हैं। स्टेटस सिर्फ शर्तें हैं। उन्हें खुद कोई सार्वजनिक या निजी संपत्ति नहीं मिली । आप किसी भी कारण से ... को अक्षम करने के साथ एक वर्गीकरण को अक्षम कर सकते हैं query_var। Sidenote: पोस्ट की स्थिति का बहुवचन है ...
केसर

1
यदि आप कोड के माध्यम से ट्रेस करते हैं (अक्सर डॉक्स पढ़ने से ज्यादा आसान, मुझे लगता है) आप उन WP_Query#get_posts()कॉल को देख सकते हैं जो उन मूल्यों के लिए get_post_stati()फ़िल्टर $wp_post_statusesकरते हैं जहां exclude_from_searchयह सत्य है तो यह क्वेरी से इन स्टेटस वाली पोस्टों को शामिल नहीं करता है । जब पोस्ट_टाइप को 'किसी' पर सेट किया जाता है, तो पोस्ट प्रकारों के लिए एक समान प्रक्रिया होती है।
तमलिन

@ टैमलिन $wp_post_statusesसंपत्ति की सामग्री की जांच करने के बाद , मुझे यह स्वीकार करना होगा कि आप सही हैं :)
kaiser

कचरा स्थिति के लिए काम नहीं करता है।
मैक्सवेल sc

2

ज्यादातर मामलों में आप उपयोग कर सकते हैं get_posts()के साथ 'any'इस के लिए पैरामीटर:

$posts = get_posts(
 array(
  'numberposts' => -1,
  'post_status' => 'any',
  'post_type' => 'my-post-type',
 )
);

लेकिन इस तरह से आप स्थिति के साथ पदों नहीं मिलेगा trashऔर auto-draft। आपको उन्हें इस तरह स्पष्ट रूप से प्रदान करने की आवश्यकता है:

$posts = get_posts(
 array(
  'numberposts' => -1,
  'post_status' => 'any, trash, auto-draft',
  'post_type' => 'my-post-type',
 )
);

या आप सभी मौजूदा स्थितियों को स्पष्ट रूप से प्रदान करने के लिए get_post_stati () फ़ंक्शन का उपयोग कर सकते हैं:

$posts = get_posts(
 array(
  'numberposts' => -1,
  'post_status' => get_post_stati(),
  'post_type' => 'my-post-type',
 )
);

1

यदि आप पास हो anyजाते हैं post_status, तब भी आपको परिणाम में पद नहीं मिलेगा, यदि निम्नलिखित में से सभी स्थितियां सत्य हैं:

  1. एक एकल पद की पूर्ति की जा रही है। इसका एक उदाहरण nameस्लग, यानी स्लग द्वारा दिया जाएगा ।
  2. पोस्ट में पोस्ट की स्थिति है जो सार्वजनिक नहीं है।
  3. क्लाइंट के पास सक्रिय व्यवस्थापक सत्र नहीं है, अर्थात आप वर्तमान में लॉग इन नहीं हैं।

समाधान

स्पष्ट रूप से हर स्थिति के लिए क्वेरी । उदाहरण के लिए, स्टैटी के लिए क्वेरी करना जो trashया नहीं हैं auto-draft(यह बहुत संभावना नहीं है कि आप उन को चाहते हैं), आप कुछ इस तरह से कर सकते हैं:

$q = new WP_Query([
    /* ... */
    'post_status' => get_post_stati(['exclude_from_search' => false]),
]);
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.