$ গ্লোবালস ['wp_the_query'] বনাম গ্লোবাল $ wp_query


16

মধ্যে পার্থক্য কি $GLOBALS['wp_the_query']এবং global $wp_query?

একজনকে অন্যের চেয়ে কেন পছন্দ করবেন?


2
আমি global $wp_queryশুধু বলবো আপনার প্রশ্নের উত্তর এক লাইনে দিতে!
সুমিত

পার্থক্য কি?
নাথান পাওয়েল

উত্তর:


27

আপনি একটি মিস করেছেন $GLOBALS['wp_query'],। সমস্ত উদ্দেশ্যে $GLOBALS['wp_query'] === $wp_query,। $GLOBALS['wp_query']পাঠযোগ্যতার জন্য তবে এটি আরও ভাল এবং এটি পরিবর্তে ব্যবহার করা উচিত $wp_query, তবে এটি ব্যক্তিগত পছন্দ হিসাবে থেকে যায়

এখন, একটি নিখুঁত বিশ্বে যেখানে ইউনিকর্নরা বিশ্ব শাসন করে $GLOBALS['wp_the_query'] === $GLOBALS['wp_query'] === $wp_query,। ডিফল্টরূপে, এটি সত্য হওয়া উচিত। এই গ্লোবালগুলি কোথায় সেট করা আছে তা যদি আমরা দেখি ( wp-settings.php), আপনি দেখতে পাবেন যে মূল ক্যোয়ারী অবজেক্টটি সঞ্চিত আছে $GLOBALS['wp_the_query']এবং এটির $GLOBALS['wp_query']কেবল একটি সদৃশ অনুলিপি$GLOBALS['wp_the_query']

/**
 * WordPress Query object
 * @global WP_Query $wp_the_query
 * @since 2.0.0
 */
$GLOBALS['wp_the_query'] = new WP_Query();
/**
 * Holds the reference to @see $wp_the_query
 * Use this global for WordPress queries
 * @global WP_Query $wp_query
 * @since 1.5.0
 */
$GLOBALS['wp_query'] = $GLOBALS['wp_the_query'];

এটি এইভাবে করার কারণ, কারণ ওয়ার্ডপ্রেস query_posts1.5 সংস্করণে আগমন দেখেছিল ।

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

আপনি দেখতে পাচ্ছেন, query_postsবর্তমান কাস্টম ক্যোয়ারী beign চালানোর জন্য মূল ক্যোয়ারী অবজেক্টটি সেট করে। এটি মুখ্য ক্যোয়ারী অবজেক্টের অখণ্ডতা ভঙ্গ করে, যা আপনাকে ভুল ডেটা দেয়, সুতরাং যে কোনও কিছুই মূল ক্যোয়ারী অবজেক্টের উপর নির্ভর করে যা ভুল তথ্যের কারণে ভেঙে যায়।

এটির মোকাবিলার একটি উপায় ছিল মূল ক্যোয়ারী অবজেক্টটি সঞ্চয় করার জন্য আরেকটি বিশ্বব্যাপী তৈরি করা, $GLOBALS['wp_the_query']যা 2.0.0 সংস্করণে চালু হয়েছিল। এই নতুন গ্লোবালটি মূল ক্যোয়ারী অবজেক্ট এবং $GLOBALS['wp_query']কেবল একটি অনুলিপি রাখে। এর মাধ্যমে wp_reset_query(), আমরা এখন $GLOBALS['wp_query']এর সত্যতা পুনরুদ্ধার করতে মূল মূল ক্যোয়ারী অবজেক্টটিতে ফিরে যেতে পারি could

তবে এটি একটি নিখুঁত বিশ্ব নয় এবং query_postsখোদ শয়তানও। হাজার হাজার সতর্কতা থাকলেও, লোকেরা এখনও ব্যবহার করে query_posts। মূল ক্যোয়ারীটি ভঙ্গ করা ছাড়াও এটি মূল ক্যোয়ারীটি পুনরায় চালু করে যা এটিকে একটি সাধারণ কাস্টম ক্যোয়ারী হিসাবে খুব ধীর করে তোলে WP_Query। অনেক লোক যখন query_postsহয়ে থাকে wp_reset_query()তখন ক্যোয়ারীটি পুনরায় সেট করে না , যা query_postsআরও খারাপ করে তোলে ।

যেহেতু আমরা এ বিষয়ে কিছু করতে পারি না, এবং প্লাগিন এবং থিমগুলি ব্যবহার বন্ধ করতে পারি না query_postsএবং আমরা কখনই জানতে পারি না যে কোনও query_postsকোয়েরিটি পুনরায় সেট করা হয়েছে কিনা wp_reset_query(), আমাদের মূল ক্যোয়ারী অবজেক্টটির আরও নির্ভরযোগ্য অনুলিপি প্রয়োজন যা আমরা জানি আমাদের 99.99999% নির্ভরযোগ্য, সঠিক দেবে ডেটা। এটিই $GLOBALS['wp_the_query']কার্যকর কারণ কোনও ওয়ার্ডপ্রেস সম্পর্কিত কোডই এর মান পরিবর্তন করতে পারে না ( নিজের ভিতরে থাকা ফিল্টার এবং ক্রিয়া বাদেWP_Query )।

দ্রুত প্রমাণ, নিম্নলিখিত চালান

var_dump( $GLOBALS['wp_the_query'] );
var_dump( $GLOBALS['wp_query'] );

query_posts( 's=crap' );


var_dump( $GLOBALS['wp_the_query'] );
var_dump( $GLOBALS['wp_query'] );

এবং ফলাফলগুলি পরীক্ষা করুন। $GLOBALS['wp_the_query']পরিবর্তন হয়নি, এবং $GLOBALS['wp_query']আছে। তাহলে কোনটি নির্ভরযোগ্য?

চূড়ান্ত নোট, এর $GLOBALS['wp_the_query']জন্য প্রতিস্থাপন নয়wp_reset_query()wp_reset_query()উচিত সবসময় সঙ্গে ব্যবহার করা query_posts, এবং query_postsউচিত না ব্যবহৃত হবে না।

শেষ করা

আপনার যদি নির্ভরযোগ্য কোডের প্রয়োজন হয় যা প্রায়শই কখনই ব্যর্থ হয় না, $GLOBALS['wp_the_query']আপনি যদি প্লাগইন এবং থিম কোডকে বিশ্বাস করেন এবং বিশ্বাস করেন এবং কেউ বিশ্বাস করেন যে query_postsএটি সঠিকভাবে ব্যবহার করে না বা ব্যবহার করছে, ব্যবহার করুন $GLOBALS['wp_query']বা$wp_query

গুরুত্বপূর্ণ সম্পাদনা

এই সাইটটিতে এখন বেশ কয়েক বছর ধরে প্রশ্নের জবাব দেওয়া হচ্ছে, আমি অনেক ব্যবহারকারীকে $wp_queryস্থানীয় ভেরিয়েবল হিসাবে ব্যবহার করতে দেখলাম , যার ফলে মূল ক্যোয়ারী অবজেক্টটিও ভেঙে যায়। এটি আরও দুর্বলতা বৃদ্ধি করে $wp_query

উদাহরণস্বরূপ, কিছু লোক এটি

$wp_query = new WP_Query( $args );

যা সারাংশ ঠিক একই হিসাবে কি query_postsকরছ


1
ক্যোয়ারী_পোস্টগুলি () পরিবর্তন করে global $wp_queryমূল ক্যোয়ারীরglobal $wp_the_query রেফারেন্স ধারণ করে
ইভান ম্যাটসন

আমার মন্তব্য সংশোধন হিসাবে নয়, তাই ক্ষমা চাইলে যদি তা হয়। আমি কেবল সংক্ষেপে বলছিলাম (টিএল; ডিআর যদি আপনি করেন) তবে আমি যা বিশ্বাস করি তা পদ্ধতির $wp_the_queryসাথে সম্পর্কিত কারণগুলির মধ্যে একটি উল্লেখযোগ্য দিক এটি WP_Query::is_main_query()উল্লেখ করা হয়নি: ডি
ইভান ম্যাটসন

@ ইভানম্যাটসন ক্ষমা, আমি আপনার প্রথম মন্তব্য ভুল বুঝে ;-)। হ্যাঁ, is_main_query()এটি একটি মোড়ক WP_Query::is_main_query()যার জন্য সংরক্ষিত মূল ক্যোয়ারী অবজেক্টের বিপরীতে বর্তমান ক্যোয়ারী অবজেক্টটি পরীক্ষা করে $GLOBALS['wp_the_query']। এটি তাত্পর্যপূর্ণ যখন আপনি pre_get_postsক্রিয়াকলাপ চালান এবং কেবলমাত্র মূল জিজ্ঞাসাটি লক্ষ্য করতে চান ;-)
পিটার গুসেন

বেশ ভাল উত্তর! @ ইভানম্যাটসন এটি সম্পাদনা করা উচিত ছিল ।
কায়সার

আপনি কি is_main_query* গুরুত্বপূর্ণ সম্পাদনা বিভাগে ফাংশনটির উল্লেখ অন্তর্ভুক্ত করতে পারেন ? আমি pre_get_postsআজ ব্যবহার করছিলাম এবং যেহেতু আমি দেখছিলাম তখন থেকেই এই ফাংশনটি ব্যবহার করা একেবারে দরকারী $wp_query
নাথান পাওয়েল

2

মূলত একটি হ'ল অন্যটির অনুলিপি। পরীক্ষা করে দেখুন wp-settings.php, লাইন 292-305:

$GLOBALS['wp_the_query'] = new WP_Query();

$GLOBALS['wp_query'] = $GLOBALS['wp_the_query'];

2

গ্লোবাল কীওয়ার্ডটি ভেরিয়েবলটিকে স্থানীয় স্কোপে আমদানি করে, $ গ্লোবালস কেবল আপনাকে ভেরিয়েবলটিতে অ্যাক্সেস দেয়।

বিস্তারিতভাবে বলতে গেলে, আপনি যদি ব্যবহার করেন তবে আপনি আবার বিশ্বব্যাপী শব্দটি ব্যবহার না করে স্থানীয় সুযোগের অভ্যন্তরে ব্যবহার global $wp_the_query; করতে পারেন $wp_the_query। সুতরাং মূলত global $wp_the_queryতুলনা করা যেতে পারে$wp_the_query = $GLOBALS['wp_the_query']

সম্পাদনা

আমি wp_the_query এর জন্য ডব্লিউপি_উইকি ভুলভাবে পড়েছি তাই আমার উত্তর প্রশ্নের সম্পূর্ণ উত্তর নয় তবে তবুও global $variableএবং এর মধ্যে পার্থক্য সম্পর্কে সাধারণ তথ্য সরবরাহ করে$GLOBALS['variable']


দয়া করে একটি সম্পাদনা ফাইল করুন কারণ এটি সত্যই আসল প্রশ্নের উত্তর নয়। শুধু এফওয়াইআই ভেরিয়েবলকে ওভাররাইড বা আনসেট করার $GLOBALS['foo']অনুমতি দেয় । সুতরাং আপনি এখানে যা বর্ণনা করেছেন তার চেয়ে এটি কিছুটা বেশি।
কায়সার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.