কেন ক্যোয়ারী_পোস্টগুলি () অবচিত হিসাবে চিহ্নিত নয়?


15

query_posts()প্রযুক্তিগতভাবে বলতে হয় দুটি ফাংশন। একটি query_posts()আসলে WP_Query::query_posts()এবং অন্যটি বিশ্ব মহাকাশে space

বিচক্ষণতা জিজ্ঞাসা:

বিশ্বব্যাপী query_posts()যদি সেই "দুষ্ট" হয় তবে কেন অবহেলা করা হয় না?

বা কেন হিসাবে চিহ্নিত করা হয় না _doing_it_wong


2
এটি একটি দুর্দান্ত প্রশ্ন! এই জুড়ে আসা অন্যদের জন্য যারা জানেন না যে কেন আপনি ক্যোয়ারী_পোস্টগুলি () ব্যবহার করবেন না, এখানে এবং এখানে কিছু ভাল প্রাইমার প্রশ্নোত্তর রয়েছে।
টিম ম্যালোন

উত্তর:


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_Query2004 সালে আবার চালু হয়েছিল 2004 (ছাতা) চিহ্নযুক্ত সমস্ত ক্ষেত্র যেখানে 2004 সালে উপস্থিত ছিল The

এখানে 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হুক আছে
  • এমনকি এটি নেস্টেড লুপগুলির জন্য সমর্থন রয়েছে
  • এটিতে এসকিউএল কোয়েরি স্ট্রিং রয়েছে
  • এটি ফলাফলের সংখ্যা ধারণ করে
  • এটি ফলাফল ধারণ করে
  • এটি সমস্ত সম্ভাব্য ক্যোয়ারী আর্গুমেন্টের তালিকা ধারণ করে
  • এটি টেম্পলেট পতাকা ধারণ করে
  • ...

আমি এই সমস্ত ব্যাখ্যা করতে পারি না, তবে এর মধ্যে কয়েকটি কৌশলপূর্ণ, তাই আসুন সংক্ষিপ্ত টিপস সরবরাহ করুন।

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_Rewriteইউআরএলের উপর ভিত্তি করে ক্যোয়ারী আর্গুমেন্ট তৈরি করতে প্রাথমিক শ্রেণি ব্যবহার করে। এই যুক্তিগুলির ভিত্তিতে এটি দুটি বিশ্বব্যাপী অভিন্ন বস্তু সংরক্ষণ করে। এই উভয়ই মূল জিজ্ঞাসা করবে।

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 নেস্টেড লুপগুলিকে সমর্থন করে

আপনি যদি প্লাগইন ব্যবহার করেন এবং আপনি টেমপ্লেট থেকে প্লাগইন ফাংশন কল করেন তবে এই দৃশ্যপট ঘটতে পারে।

এখানে নেস্টেড লুপগুলির জন্য ওয়ার্ডপ্রেসটির সহায়তা কার্যকারিতা রয়েছে যা শোকেস উদাহরণটি এখানে:

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_Queryহয়েছে wp_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 );

এখানে সম্পর্কিত এসকিউএল অনুরোধ রইল:

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_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

টিপ: ২০০৪ সালে প্রথমে কেবল ছিল 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);
}

পিএইচপি 4 এ অবজেক্টস সহ সমস্ত কিছু মান দিয়ে পাস হয়েছিল। 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']সেট না করে আবার তৈরি করা হবে।

পিএইচপি 5 + হ'ল স্মার্টটি খালি খালি করা উচিত $GLOBALS['wp_query'], যেমন পিএইচপি 4 এর মতো আমরা এটি দিয়েছিলামunset($GLOBALS['wp_query']);

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

ফলস্বরূপ query_postsমোট 2M মেমরি গ্রহণ করে, যখন get_posts3M মেমরি গ্রহণ করে।

মনে রাখবেন query_postsআমরা আসল বস্তুটি ফিরিয়ে দিচ্ছি না, তবে বস্তুর একটি উল্লেখ।

পিএইচপি নেট থেকে : পিএইচপি রেফারেন্স একটি উপনাম, যা দুটি ভিন্ন ভিন্ন ভেরিয়েবলকে একই মানটিতে লেখার অনুমতি দেয়। পিএইচপি 5 হিসাবে, কোনও অবজেক্ট ভেরিয়েবলটিতে সেই বস্তুটি আর মান হিসাবে থাকে না। এটিতে কেবল একটি অবজেক্ট আইডেন্টিফায়ার রয়েছে যা অবজেক্ট অ্যাকসেসরদের প্রকৃত অবজেক্টটি সন্ধান করতে দেয়। যখন কোনও বস্তু আর্গুমেন্টের মাধ্যমে প্রেরণ করা হয়, ফেরত দেওয়া হয় বা অন্য ভেরিয়েবলের কাছে বরাদ্দ করা হয়, তখন বিভিন্ন ভেরিয়েবলের উপকরণ নয়: এগুলি সনাক্তকারীটির একটি অনুলিপি রাখে, যা একই বস্তুকে নির্দেশ করে।

এছাড়াও পিএইচপি 5 + এ্যাসাইন (=) অপারেটরটি স্মার্ট। এটি অগভীর অনুলিপি ব্যবহার করবে এবং হার্ড অবজেক্ট কপি ব্যবহার করবে না। যখন আমরা এটি লিখি $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() হ'ল এটি এখনও প্লাগইন এবং থিমগুলি দ্বারা ব্যাপকভাবে ব্যবহৃত হয়, যদিও আপনার কেন কখনও এটি ব্যবহার করা উচিত নয় সে বিষয়ে সত্যই ভাল লেখা রয়েছে । আমি মনে করি ডাব্লুপিএসইতে এখানে সবচেয়ে মহাকাব্য পোস্টটি হ'ল:

অবচয়! == অপসারণ , তাই অবচয়query_posts() নিম্ন মানের devs এবং সাধারণভাবে যারা ওয়ার্ডপ্রেস জানি না এবং যারা নির্দেশিকা হিসাবে নিম্ন মানের টিউটোরিয়াল ব্যবহার দ্বারা ব্যবহারের থামবে না। শুধু কিছু প্রমাণ হিসাবে কত প্রশ্ন আমরা এখনও এখানে পেতে পারি যেখানে লোকেরা ব্যবহার caller_get_postsমধ্যে WP_Query? এটি বহু বছর ধরে অবহেলা করা হয়েছে।

অবহেলিত ফাংশন এবং যুক্তিগুলি যে কোনও সময় মুখ্য ডেভসগুলি উপযুক্ত দেখতে সরিয়ে ফেলা যায়, তবে সম্ভবত এটি কখনও ঘটবে না query_posts() লক্ষ লক্ষ সাইটগুলিকে ভেঙে ফেলবে। সুতরাং হ্যাঁ, আমরা সম্ভবত কখনই মোট অপসারণ দেখতে পাব না query_posts()- এটি সম্ভবত এমনটি অবহিত হবে না এমন সত্য হতে পারে।

এটি যদিও একটি সূচনা পয়েন্ট, তবে একটি মনে রাখতে হবে, ওয়ার্ডপ্রেসে কিছু হ্রাস করা এর ব্যবহার থামিয়ে দেয় না।

আপডেট 19 মে 2016

আমি তোলা টিকিটটি এখন বন্ধ এবং 4 বছরের পুরানো টিকিটের নকল হিসাবে চিহ্নিত হয়েছে , যা ওন্টফিক্স হিসাবে বন্ধ ছিল ছিল এবং এটি আবার খোলা হয়েছিল এবং এখনও উন্মুক্ত এবং অমীমাংসিত রয়েছে।

দেখে মনে হচ্ছে মূল বিকাশকারীরা এই পুরানো বিশ্বস্ত সামান্য মন্দকেই ঝুলিয়ে রাখছেন। আগ্রহী প্রত্যেকে, এখানে নকল 4 বছরের পুরানো টিকিট


কেন তারা টিকেট বন্ধ core.trac.wordpress.org/ticket/36874 ? অনুগ্রহ করে @ পিটারগুসেন এই টিকিটের সাথে 1: 1
প্রাস্তি

@ প্রস্টি দেখে মনে হচ্ছে এটি নকল হিসাবে চিহ্নিত হয়েছে কারণ এই সমস্যাটি ইতিমধ্যে সামনে এনেছে ... 4 বছর আগে এখানে পাওয়া গেছে
হাওডি_এমসিজি

3

[কিছুটা রেন্ট]

এটি এই মুহূর্তে স্থায়ী মূল দর্শন যে কিছুই সত্যই হ্রাস করা হয় না। অবজ্ঞানের বিজ্ঞপ্তিটি, যদিও এটি একটি সুন্দর লাগবে তবে কেবলমাত্র যদি ফাংশনটি কোনও পর্যায়ে বাদ না দেওয়া হয় তবে তা উপেক্ষা করা হবে। এমন অনেক লোক রয়েছে যার সাথে বিকাশ হয় না WP_DEBUGএবং সত্যিকারের ভাঙ্গন না ঘটলে বিজ্ঞপ্তিটি লক্ষ্য করবেন না।

OTOH হাত, এই ফাংশন gotoবিবৃতি মত । ব্যক্তিগতভাবে আমি কখনই (ততক্ষণে সংক্ষিপ্ত সংজ্ঞা হিসাবে প্রত্যাশিত) ব্যবহার করি নি gotoতবে আমি এমন কিছু পরিস্থিতির দিকে ইঙ্গিত করে যুক্তিগুলি বুঝতে পারি যেটি ডিফল্টরূপে এটি মন্দ নয়। একই সাথে যায়query_posts এটি একটি সহজ লুপ তৈরি করার জন্য প্রয়োজনীয় সমস্ত গ্লোবালগুলি সেট আপ করার একটি সহজ উপায় এবং এজ্যাক্স বা বিশ্রাম-এপি প্রসঙ্গে দরকারী হতে পারে। আমি এগুলিও সেইসব প্রসঙ্গে কখনও ব্যবহার করতে পারি না তবে আমি দেখতে পাচ্ছি যে এটি কোডিংয়ের শৈলীর বিষয় এবং তারপর একটি ফাংশন নিজেই খারাপ হয়ে যায়।

কিছুটা গভীরতর দিকে গেলে মূল সমস্যাটি হ'ল গ্লোবালগুলি একেবারে সেট করা দরকার। এটি সেটাই মুখ্য সমস্যা যা সেগুলি সেট করতে সহায়তা করে function


এবং তুলনার জন্য, query_postsগৌণ কোয়ের চেয়ে সত্যই ধীর (পড়ুন: মূল ক্যোয়ারী নয়)।
প্রোস্টি

@ প্রস্টি, যেমন এটি কেবল একটি ডাব্লুপিউইউকিউরি সেট করে এবং চালায়, এটি কত ধীর হতে পারে? অবশ্যই কিছু ওভারহেড আছে তবে আমরা সম্ভবত এখানে মিলিসেকেন্ডের কথা বলছি। এটি অবশ্যই ধরে নিয়েছে যে আপনি এটি এমন জায়গায় ব্যবহার করেছেন যেখানে ডাব্লুপিটি ডিফল্টরূপে কোনও কোয়েরি সরবরাহ করে না। এটি যে জায়গাগুলিতে এটি করা খারাপ সেখানে query_postsনিজেই নয় বরং অযথা কোয়েরি যা ডব্লিউপি লোড করার সময় হয়েছিল
মার্ক কাপলুন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.