क्यों क्वेरी_पोस्ट () को पदावनत के रूप में चिह्नित नहीं किया गया है?


15

query_posts()तकनीकी रूप से दो कार्य हैं । एक query_posts()वास्तव में है WP_Query::query_posts()और दूसरा वैश्विक अंतरिक्ष में है।

विवेक से पूछना:

यदि वैश्विक query_posts()है कि "बुराई" क्यों नहीं पदावनत किया जाता है?

या के रूप में चिह्नित क्यों नहीं है _doing_it_wong


2
यह एक अच्छा सवाल है! इसके पार आने वाले अन्य लोगों के लिए जो यह नहीं जानते हैं कि आप क्यों नहीं यहाँ क्वेरी_पोस्ट () का उपयोग करें, और यहाँ कुछ अच्छे प्राइमर Q & A हैं।
टिम मेलोन

जवाबों:


11

आवश्यक प्रश्न

तीनों में आइए खुदाई: ::query_posts, ::get_postsऔर class WP_Queryसमझने के लिए ::query_postsबेहतर है।

वर्डप्रेस में डेटा प्राप्त करने के लिए आधारशिला WP_Queryवर्ग है। दोनों तरीके ::query_postsऔर ::get_postsउस वर्ग का उपयोग करते हैं।

ध्यान दें कि कक्षा WP_Queryमें समान नाम वाली विधियाँ भी शामिल हैं: WP_Query::query_postsऔर WP_Query::get_posts, लेकिन हम वास्तव में केवल वैश्विक विधियों पर विचार करते हैं, इसलिए भ्रमित न हों।

यहाँ छवि विवरण दर्ज करें

समझ WP_Query

कक्षा WP_Queryको 2004 में वापस लाया गया। सभी क्षेत्रों में umbrella (छाता) का निशान है, जो 2004 में वापस आ गया था। अतिरिक्त क्षेत्रों को बाद में जोड़ा गया था।

यहाँ WP_Queryसंरचना है:

class WP_Query (as in WordPress v4.7) 
    public $query; 
    public $query_vars = array(); 
    public $tax_query;
    public $meta_query = false;
    public $date_query = false;
    public $queried_object; 
    public $queried_object_id; 
    public $request;
    public $posts; 
    public $post_count = 0; 
    public $current_post = -1; 
    public $in_the_loop = false;
    public $post; 
    public $comments;
    public $comment_count = 0;
    public $current_comment = -1;
    public $comment;
    public $found_posts = 0;
    public $max_num_pages = 0;
    public $max_num_comment_pages = 0;
    public $is_single = false; 
    public $is_preview = false; 
    public $is_page = false; 
    public $is_archive = false; 
    public $is_date = false; 
    public $is_year = false; 
    public $is_month = false; 
    public $is_day = false; 
    public $is_time = false; 
    public $is_author = false; 
    public $is_category = false; 
    public $is_tag = false;
    public $is_tax = false;
    public $is_search = false; 
    public $is_feed = false; 
    public $is_comment_feed = false;
    public $is_trackback = false; 
    public $is_home = false; 
    public $is_404 = false; 
    public $is_embed = false;
    public $is_paged = false;
    public $is_admin = false; 
    public $is_attachment = false;
    public $is_singular = false;
    public $is_robots = false;
    public $is_posts_page = false;
    public $is_post_type_archive = false;
    private $query_vars_hash = false;
    private $query_vars_changed = true;
    public $thumbnails_cached = false;
    private $stopwords;
    private $compat_fields = array('query_vars_hash', 'query_vars_changed');
    private $compat_methods = array('init_query_flags', 'parse_tax_query');
    private function init_query_flags()

WP_Query स्विस सेना चाकू है।

इसके बारे में कुछ बातें WP_Query:

  • यह कुछ ऐसा है जिसे आप अपने द्वारा पारित तर्कों के माध्यम से नियंत्रित कर सकते हैं
  • यह डिफ़ॉल्ट रूप से लालची है
  • यह लूपिंग के लिए पदार्थ रखता है
  • यह वैश्विक अंतरिक्ष x2 में सहेजा गया है
  • यह प्राथमिक या माध्यमिक हो सकता है
  • यह सहायक वर्गों का उपयोग करता है
  • यह एक आसान pre_get_postsहुक है
  • यह भी नेस्टेड छोरों के लिए समर्थन है
  • यह SQL क्वेरी स्ट्रिंग रखता है
  • यह परिणामों की संख्या रखता है
  • यह परिणाम रखता है
  • यह सभी संभावित क्वेरी तर्कों की सूची रखता है
  • यह टेम्पलेट झंडे रखती है
  • ...

मैं इन सब की व्याख्या नहीं कर सकता, लेकिन इनमें से कुछ पेचीदा हैं, तो चलिए संक्षिप्त सुझाव प्रदान करते हैं।

WP_Query कुछ ऐसा है जिसे आप तर्क के माध्यम से नियंत्रित कर सकते हैं

The list of the arguments
---
 attachment
 attachment_id
 author
 author__in
 author__not_in
 author_name
 cache_results
 cat
 category__and
 category__in
 category__not_in
 category_name
 comments_per_page
 day
 embed
 error
 feed
 fields
 hour
 ignore_sticky_posts
 lazy_load_term_meta
 m
 menu_order
 meta_key
 meta_value
 minute
 monthnum
 name
 no_found_rows
 nopaging
 order
 p
 page_id
 paged
 pagename
 post__in
 post__not_in
 post_name__in
 post_parent
 post_parent__in
 post_parent__not_in
 post_type
 posts_per_page
 preview
 s
 second
 sentence
 static
 subpost
 subpost_id
 suppress_filters
 tag
 tag__and
 tag__in
 tag__not_in
 tag_id
 tag_slug__and
 tag_slug__in
 tb
 title
 update_post_meta_cache
 update_post_term_cache
 w
 year

वर्डप्रेस संस्करण 4.7 से यह सूची निश्चित रूप से भविष्य में बदल जाएगी।

यह WP_Queryतर्कों से वस्तु का निर्माण करने वाला न्यूनतम उदाहरण होगा :

// WP_Query arguments
$args = array ( /* arguments*/ );
// creating the WP_Query object
$query = new WP_Query( $args );
// print full list of arguments WP_Query can take
print ( $query->query_vars );

WP_Query लालची है

इस विचार पर बनाया गया कि get all you canवर्डप्रेस डेवलपर्स ने सभी संभावित डेटा को जल्दी प्राप्त करने का निर्णय लिया क्योंकि यह प्रदर्शन के लिए अच्छा है । यही कारण है कि जब डेटाबेस से क्वेरी 10 पोस्ट लेती है तो इसे अलग-अलग क्वेरी के माध्यम से इन पदों के लिए शर्तें और मेटाडेटा भी मिलेगा। शर्तें और मेटाडेटा को कैश किया जाएगा (प्रीफ़ेट किया गया)।

ध्यान दें कि कैशिंग केवल एकल अनुरोध जीवन भर के लिए है।

यदि आप सेट आप कैशिंग निष्क्रिय कर सकते हैं update_post_meta_cacheऔर update_post_term_cacheकरने के लिए falseहै, जबकि स्थापना के WP_Queryतर्क। जब कैशिंग अक्षम हो जाता है, तो डेटा केवल मांग पर डेटाबेस से अनुरोध किया जाएगा।

अधिकांश वर्डप्रेस ब्लॉग्स के लिए कैशिंग अच्छा काम करता है, लेकिन कुछ ऐसे मौके होते हैं जब आप कैशिंग को अक्षम कर सकते हैं।

WP_Query सहायक वर्गों का उपयोग करता है

यदि आपने WP_Queryखेतों की जाँच की है तो आपके पास ये तीन हैं:

public $tax_query;
public $meta_query;
public $date_query;

आप भविष्य में नया जोड़ने की कल्पना कर सकते हैं।

यहाँ छवि विवरण दर्ज करें

WP_Query लूपिंग के लिए पदार्थ रखता है

इस कोड में:

$query = new WP_Query( $args )
if ( $query->have_posts() ) {
        while ( $query->have_posts() ) {
            $query->the_post();

आप देख सकते हैं कि आपके WP_Queryपास जो पदार्थ हो सकते हैं। सहायक तरीके भी हैं। आप सिर्फ whileलूप सेट करें ।

ध्यान दें। forऔर whileलूप्स शब्दार्थ के बराबर हैं।

WP_Query प्राथमिक और माध्यमिक

वर्डप्रेस में आपके पास एक प्राथमिक और शून्य या अधिक माध्यमिक प्रश्न हैं।

प्राथमिक क्वेरी नहीं होना संभव है, लेकिन यह इस लेख के दायरे से परे है।

प्राथमिक क्वेरी को मुख्य क्वेरी या नियमित क्वेरी के रूप में जाना जाता है । द्वितीयक क्वेरी को एक कस्टम क्वेरी भी कहा जाता है ।

WP_RewriteURL के आधार पर क्वेरी तर्क बनाने के लिए वर्डप्रेस क्लास का उपयोग करता है । इन तर्कों के आधार पर यह वैश्विक अंतरिक्ष में दो समान वस्तुओं को संग्रहीत करता है। ये दोनों मुख्य क्वेरी का आयोजन करेंगे।

global $wp_query   @since WordPress 1.5
global $wp_the_query @since WordPress 2.1

जब हम मुख्य प्रश्न कहते हैं तो हम इन चरों के बारे में सोचते हैं। अन्य प्रश्नों को माध्यमिक या कस्टम कहा जा सकता है।

यह global $wp_queryया तो उपयोग करने के लिए पूरी तरह से कानूनी है $GLOBALS['wp_query'], लेकिन दूसरी संकेतन का उपयोग करना अधिक उल्लेखनीय है, और फ़ंक्शन के दायरे के भीतर एक अतिरिक्त रेखा टाइप करने से बचाता है।

$GLOBALS['wp_query']और $GLOBALS['wp_the_query']अलग-अलग वस्तुएं हैं। $GLOBALS['wp_the_query']जमे रहना चाहिए।

WP_Queryआसान pre_get_postsहुक है।

यह एक्शन हुक है। यह किसी भी WP_Query उदाहरण पर लागू होगा । आप इसे कहते हैं:

add_action( 'pre_get_posts', function($query){

 if ( is_category() && $query->is_main_query() ) {
    // set your improved arguments
    $query->set( ... );  
    ...  
 }

 return $query;  
});

यह हुक बहुत अच्छा है और यह किसी भी क्वेरी तर्क को बदल सकता है।

यहाँ आप पढ़ सकते हैं :

क्वेरी चर ऑब्जेक्ट के बनने के बाद आग, लेकिन वास्तविक क्वेरी चलने से पहले।

तो यह हुक तर्क प्रबंधक है, लेकिन नई WP_Queryवस्तुएं नहीं बना सकता । यदि आपके पास एक प्राथमिक और एक द्वितीयक क्वेरी है, pre_get_postsतो तीसरा नहीं बना सकते। या यदि आपके पास सिर्फ एक प्राथमिक था तो वह माध्यमिक नहीं बना सकता है।

ध्यान दें कि आपको मुख्य क्वेरी को बदलने की आवश्यकता है केवल आप requestहुक का भी उपयोग कर सकते हैं ।

WP_Query नेस्टेड छोरों का समर्थन करता है

यह परिदृश्य तब हो सकता है यदि आप प्लगइन्स का उपयोग करते हैं, और आप टेम्पलेट से प्लगइन फ़ंक्शन कहते हैं।

यहाँ शोकेस उदाहरण है कि WordPress के पास नेस्टेड छोरों के लिए सहायक कार्य भी हैं:

global $id;
while ( have_posts() ) : the_post(); 

    // the custom $query
    $query = new WP_Query( array(   'posts_per_page' => 5   ) );    
    if ( $query->have_posts() ) {

        while ( $query->have_posts() ) : $query->the_post();            
            echo '<li>Custom ' . $id . '. ' . get_the_title() . '</li>';
        endwhile;       
    }   

    wp_reset_postdata();
    echo '<li>Main Query ' . $id . '. ' . get_the_title() . '</li>';

endwhile;

आउटपुट इस तरह से होगा क्योंकि मैंने थीम यूनिट टेस्ट डेटा स्थापित किया है :

Custom 100. Template: Sticky
Custom 1. Hello world!
Custom 10. Markup: HTML Tags and Formatting
Custom 11. Markup: Image Alignment
Custom 12. Markup: Text Alignment
Custom 13. Markup: Title With Special Characters
Main Query 1. Hello world!

भले ही मैंने कस्टम $ क्वेरी में 5 पोस्ट का अनुरोध किया हो, यह मुझे छह वापस कर देगा, क्योंकि स्टिकी पोस्ट साथ जाएगी। यदि wp_reset_postdataपिछले उदाहरण में कोई भी आउटपुट ऐसा नहीं होगा, तो $GLOBALS['post']वसीयत अमान्य होने के कारण ।

Custom 1001. Template: Sticky
Custom 1. Hello world!
Custom 10. Markup: HTML Tags and Formatting
Custom 11. Markup: Image Alignment
Custom 12. Markup: Text Alignment
Custom 13. Markup: Title With Special Characters
Main Query 13. Markup: Title With Special Characters

WP_Querywp_reset_queryकार्य किया है

यह एक रीसेट बटन की तरह है। $GLOBALS['wp_the_query']हर समय जमे रहना चाहिए, और प्लगइन्स या थीम को कभी भी बदलना नहीं चाहिए।

यहाँ क्या wp_reset_queryहै:

function wp_reset_query() {
    $GLOBALS['wp_query'] = $GLOBALS['wp_the_query'];
    wp_reset_postdata();
}

पर टिप्पणी करता है get_posts

get_posts की तरह लगता है

File: /wp-includes/post.php
1661: function get_posts( $args = null ) {
1662:   $defaults = array(
1663:       'numberposts' => 5,
1664:       'category' => 0, 'orderby' => 'date',
1665:       'order' => 'DESC', 'include' => array(),
1666:       'exclude' => array(), 'meta_key' => '',
1667:       'meta_value' =>'', 'post_type' => 'post',
1668:       'suppress_filters' => true
1669:   );
... // do some argument parsing
1685:   $r['ignore_sticky_posts'] = true;
1686:   $r['no_found_rows'] = true;
1687: 
1688:   $get_posts = new WP_Query;
1689:   return $get_posts->query($r);

भविष्य में लाइन नंबर बदल सकते हैं।

यह सिर्फ एक है आवरण के आसपास WP_Queryहै कि रिटर्न क्वेरी वस्तु पदों।

ignore_sticky_postsसही साधनों पर सेट चिपचिपा पोस्ट केवल एक प्राकृतिक स्थिति में दिखाई दे सकते। सामने कोई चिपचिपा पद नहीं होगा। no_found_rowsसही मायने में दूसरा सेट वर्डप्रेस डेटाबेस एपीआई SQL_CALC_FOUND_ROWSपेजेशन को लागू करने के लिए उपयोग नहीं करेगा , पाया पंक्तियों की संख्या को निष्पादित करने के लिए डेटाबेस पर लोड को कम करता है ।

यह तब आसान होता है जब आपको पेजिंग की आवश्यकता नहीं होती है। हम समझते हैं कि अब हम इस क्वेरी के साथ इस फ़ंक्शन की नकल कर सकते हैं:

$args = array ( 'ignore_sticky_posts' => true, 'no_found_rows' => true);
$query = new WP_Query( $args );
print( $query->request );

यहाँ संगत SQL अनुरोध है:

SELECT wp_posts.ID FROM wp_posts WHERE 1=1 AND wp_posts.post_type = 'post' AND (wp_posts.post_status = 'publish' OR wp_posts.post_status = 'private') ORDER BY wp_posts.post_date DESC LIMIT 0, 10

तुलना करें कि हमारे पास अब पिछले SQL अनुरोध के साथ क्या SQL_CALC_FOUND_ROWSमौजूद है।

SELECT SQL_CALC_FOUND_ROWS wp_posts.ID FROM wp_posts WHERE 1=1 AND wp_posts.post_type = 'post' AND (wp_posts.post_status = 'publish' OR wp_posts.post_status = 'private')  ORDER BY wp_posts.post_date DESC LIMIT 0, 10

बिना रिक्वेस्ट SQL_CALC_FOUND_ROWSतेज होगी।

पर टिप्पणी करता है query_posts

टिप: 2004 में पहली बार केवल वहाँ था global $wp_query। वर्डप्रेस 2.1 संस्करण के रूप में $wp_the_queryआया था। टिप: $GLOBALS['wp_query']और $GLOBALS['wp_the_query']अलग-अलग ऑब्जेक्ट हैं।

query_posts()है WP_Queryआवरण। यह मुख्य WP_Queryऑब्जेक्ट का संदर्भ देता है , और उसी समय यह सेट हो जाएगा global $wp_query

File: /wp-includes/query.php
function query_posts($args) {
    $GLOBALS['wp_query'] = new WP_Query();
    return $GLOBALS['wp_query']->query($args);
}

PHP4 में, वस्तुओं सहित सब कुछ, मूल्य द्वारा पारित किया गया था। query_postsइस तरह था:

File: /wp-includes/query.php (WordPress 3.1)
function &query_posts($args) {
    unset($GLOBALS['wp_query']);
    $GLOBALS['wp_query'] =& new WP_Query();
    return $GLOBALS['wp_query']->query($args);
}

कृपया विशिष्ट परिदृश्य में ध्यान दें कि एक प्राथमिक और एक द्वितीयक क्वेरी के साथ हमारे पास ये तीन चर हैं:

$GLOBALS['wp_the_query'] 
$GLOBALS['wp_query'] // should be the copy of first one
$custom_query // secondary

मान लीजिए कि इन तीनों में से प्रत्येक में 1M मेमोरी है। कुल 3M मेमोरी होगी। यदि हम उपयोग करते हैं query_posts, $GLOBALS['wp_query']तो परेशान हो जाएंगे और फिर से बनाए जाएंगे।

PHP5 + $GLOBALS['wp_query']ऑब्जेक्ट को खाली करने वाला स्मार्ट होना चाहिए , जैसे PHP4 में हमने इसके साथ किया थाunset($GLOBALS['wp_query']);

function query_posts($args) {
    $GLOBALS['wp_query'] = new WP_Query();
    return $GLOBALS['wp_query']->query($args);
}

परिणामस्वरूप query_postsकुल 2M मेमोरी की get_postsखपत होती है , जबकि 3M मेमोरी की खपत होती है।

ध्यान दें कि query_postsहम वास्तविक वस्तु नहीं लौटा रहे हैं, लेकिन वस्तु का संदर्भ है।

से php.net : एक PHP संदर्भ एक उपनाम है, जो एक ही मूल्य के लिए लिखने के लिए दो अलग-अलग चर अनुमति देता है। PHP 5 के रूप में, एक ऑब्जेक्ट वैरिएबल में ऑब्जेक्ट को अब मान के रूप में शामिल नहीं किया गया है। इसमें केवल एक ऑब्जेक्ट पहचानकर्ता होता है जो ऑब्जेक्ट एक्सेसर्स को वास्तविक ऑब्जेक्ट खोजने की अनुमति देता है। जब कोई ऑब्जेक्ट तर्क द्वारा भेजा जाता है, तो किसी अन्य चर को लौटाया या असाइन किया जाता है, विभिन्न चर एलियास नहीं होते हैं: वे पहचानकर्ता की एक प्रति पकड़ते हैं, जो उसी ऑब्जेक्ट को इंगित करता है।

इसके अलावा PHP5 में असाइन (=) ऑपरेटर स्मार्ट है। यह उथली प्रतिलिपि का उपयोग करेगा और हार्ड ऑब्जेक्ट की प्रतिलिपि नहीं। जब हम इस तरह से लिखते हैं तो $GLOBALS['wp_query'] = $GLOBALS['wp_the_query'];केवल डेटा की प्रतिलिपि बनाई जाएगी, न कि पूरी वस्तु के बाद से ये समान ऑब्जेक्ट प्रकार साझा करते हैं।

यहाँ एक उदाहरण है

print( md5(serialize($GLOBALS['wp_the_query']) ) );
print( md5(serialize($GLOBALS['wp_query'] ) ) );
query_posts( '' );
print( md5(serialize($GLOBALS['wp_the_query']) ) );
print( md5(serialize($GLOBALS['wp_query'] ) ) );

परिणाम होगा:

f14153cab65abf1ea23224a1068563ef
f14153cab65abf1ea23224a1068563ef
f14153cab65abf1ea23224a1068563ef
d6db1c6bfddac328442e91b6059210b5

क्वेरी रीसेट करने का प्रयास करें:

print( md5(serialize($GLOBALS['wp_the_query'] ) ) );
print( md5(serialize($GLOBALS['wp_query'] ) ) );
query_posts( '' );
wp_reset_query();
print( md5(serialize($GLOBALS['wp_the_query'] ) ) );
print( md5(serialize($GLOBALS['wp_query'] ) ) );

परिणाम होगा:

f14153cab65abf1ea23224a1068563ef
f14153cab65abf1ea23224a1068563ef
f14153cab65abf1ea23224a1068563ef
f14153cab65abf1ea23224a1068563ef

आप उपयोग करने पर भी समस्याएँ पैदा कर सकते हैं WP_Query

print( md5(serialize($GLOBALS['wp_the_query'] ) ) );
print( md5(serialize($GLOBALS['wp_query'] ) ) );
global $wp_query;
$wp_query = new WP_Query( array( 'post_type' => 'post' ) );   
print( md5(serialize($GLOBALS['wp_the_query'] ) ) );
print( md5(serialize($GLOBALS['wp_query'] ) ) );

बेशक, समाधान wp_reset_queryफिर से फ़ंक्शन का उपयोग करना होगा ।

print( md5(serialize($GLOBALS['wp_the_query'] ) ) );
print( md5(serialize($GLOBALS['wp_query'] ) ) );
global $wp_query;
$wp_query = new WP_Query( array( 'post_type' => 'post' ) );
wp_reset_query();
print( md5(serialize($GLOBALS['wp_the_query'] ) ) );
print( md5(serialize($GLOBALS['wp_query'] ) ) );

यही कारण है कि मुझे लगता है कि query_postsस्मृति दृष्टिकोण से बेहतर हो सकता है। लेकिन आपको हमेशा wp_reset_queryट्रिक करनी चाहिए ।


10

मैंने सिर्फ एक नया ट्रेस टिकट बनाया है, टिकट # 36874 , के पदावनति का प्रस्ताव करने के लिए query_posts()। स्वीकार किया जाएगा या नहीं यह एक अच्छा सवाल है।

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

deprecation! == हटाना , इसलिए deprecating query_posts()खराब गुणवत्ता वाले देवों और सामान्य रूप से उन लोगों द्वारा इसके उपयोग को नहीं रोकेगा जो वर्डप्रेस को नहीं जानते हैं और जो दिशानिर्देशों के रूप में खराब गुणवत्ता वाले ट्यूटोरियल का उपयोग करते हैं। बस कुछ प्रमाण के रूप में, हम अभी भी कितने प्रश्न यहां प्राप्त करते हैं जहां लोग उपयोग करते caller_get_postsहैं WP_Query? यह अब कई वर्षों के लिए पदावनत कर दिया गया है।

हालांकि, किसी भी समय कोर देवों को फिट देखा जा सकता है, लेकिन हटाए गए कार्यों और तर्कों को हटाया जा सकता है, लेकिन ऐसा शायद कभी नहीं होगा query_posts()क्योंकि इससे लाखों साइटें टूट जाएंगी। तो हाँ, हम शायद कभी भी कुल निष्कासन को नहीं देखेंगे query_posts()- जो इस तथ्य को जन्म दे सकता है कि यह संभवतः सबसे अधिक कभी नहीं निकलेगा।

हालांकि यह एक शुरुआती बिंदु है, लेकिन किसी को याद रखना होगा, वर्डप्रेस में कुछ को हटाने से इसका उपयोग बंद नहीं होता है।

अद्यतन 19 मई 2016

मेरे द्वारा उठाया गया टिकट अब बंद हो गया है और एक 4 साल पुराने टिकट के डुप्लिकेट के रूप में चिह्नित किया गया है, जिसे वॉन्टफिक्स के रूप में बंद किया गया था और फिर से खोल दिया गया था और अभी भी खुला और अनसुलझा है।

लगता है कि कोर डेवलपर्स इस पुरानी वफादार छोटी बुराई पर लटके हुए हैं। हर कोई दिलचस्पी रखता है, यहां डुप्लीकेट 4 वर्ष पुराना टिकट है


उन्होंने टिकट core.trac.wordpress.org/ticket/36874 क्यों बंद किया ? कृपया @PieterGoosen इस टिकट के लिंक को अपने टिकट core.trac.wordpress.org/ticket/36874 में शामिल कर सकते हैं क्योंकि यह प्रश्न टिकट से संबंधित है 1: 1
prosti

@prosti ऐसा लगता है कि इसे डुप्लिकेट के रूप में चिह्नित किया गया था क्योंकि यह मुद्दा पहले ही लाया जा चुका है ... 4 साल पहले यहां पाया गया था
हाउडी_एमसीजी

3

[कुछ हद तक]

यह इस बिंदु पर स्थायी कोर दर्शन है कि कुछ भी वास्तव में पदावनत नहीं है। पदावनति नोटिस, जबकि यह होना अच्छा है, बस इसे अनदेखा किया जा रहा है यदि फ़ंक्शन वास्तव में कुछ बिंदु पर गिराया नहीं जाएगा। ऐसे कई लोग हैं जो साथ विकसित नहीं होते हैं WP_DEBUGऔर वास्तविक टूटना नहीं होने पर नोटिस नहीं करेंगे।

OTOH हाथ, यह फ़ंक्शन gotoकथन की तरह है। व्यक्तिगत रूप से मैंने कभी भी (छोटी परिभाषा के लिए तब अपेक्षित) का उपयोग gotoनहीं किया, लेकिन मैं कुछ परिस्थितियों की ओर इशारा करते हुए तर्कों को समझ सकता हूं जिनमें यह डिफ़ॉल्ट रूप से बुराई नहीं है। उसी के साथ जाता है query_posts, यह एक सरल लूप बनाने के लिए आवश्यक सभी ग्लोबल्स को स्थापित करने का एक सरल तरीका है, और अजाक्स या बाकी-एपी संदर्भ में उपयोगी हो सकता है। मैं उन संदर्भों में भी इसका उपयोग कभी नहीं करूंगा, लेकिन मैं यह देख सकता हूं कि यह कोडिंग की शैली का एक मुद्दा है, फिर एक समारोह अपने आप में बुराई है।

थोड़ा गहराई में जाने पर, मुख्य समस्या यह है कि ग्लोबल्स को बिल्कुल सेट करने की आवश्यकता है। यह मुख्य समस्या है कि एक फ़ंक्शन नहीं है जो उन्हें स्थापित करने में मदद करता है।


और तुलना के लिए, वास्तव में query_postsएक माध्यमिक क्वेरी से धीमी है (पढ़ें: मुख्य क्वेरी नहीं)।
प्रोस्टि

@prosti, जैसा कि यह सिर्फ सेट करता है और wp_query चलाता है, यह कितना धीमा हो सकता है? यकीन है कि वहाँ कुछ उपरि है, लेकिन हम शायद यहाँ मिलिससेकंड पर बात कर रहे हैं। यह निश्चित रूप से आप उन जगहों पर इसका उपयोग करते हैं जहां WP डिफ़ॉल्ट रूप से क्वेरी प्रदान नहीं करता है। उन जगहों पर जहां यह खराब है, query_postsखुद ही नहीं बल्कि बेकार क्वेरी जो WP लोड होने पर की गई थी
मार्क कपलुन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.