আমাদের কি বিশ্বব্যাপী পোস্টগুলি বিশ্বাস করা উচিত?


21

@ টসচো এই উত্তরে একটি মন্তব্য রেখেছিল যা আমাকে আবার ভাবতে বাধ্য করেছে। বিশেষত পোস্ট গ্লোবালদের মতো বিশ্বব্যাপী আমাদের কতটা আস্থা রাখতে হবে $post?

তাতে কি? আপনার চেক চলার আগে গ্লোবাল ভেরিয়েবল প্রত্যেকের থেকে ওভাররাইট করা যেতে পারে। এটি গ্লোবাল ভেরিয়েবলগুলির মূল বিষয়: গ্লোবাল অ্যাক্সেস।

$postউদাহরণস্বরূপ অবশ্যই গ্লোবালগুলির মধ্যে একটি যা বেশিরভাগই থিমের মধ্যে বা প্লাগইনগুলির মাধ্যমে পরিবর্তিত হয়। তবুও এটি প্রদত্ত টেমপ্লেটের অভ্যন্তরে অন্যান্য অ্যাপ্লিকেশনগুলিতে গ্লোবাল সবচেয়ে বেশি ব্যবহৃত হয়, উদাহরণস্বরূপ, সম্পর্কিত পোস্ট সেটআপ করতে।

কাস্টম ক্যোয়ারীগুলি ব্যবহারের কারণে সৃষ্ট নির্দিষ্ট সমস্যাগুলির সাথে বেশ কয়েকটি পোস্টের উত্তর দেওয়ার (এবং মন্তব্য করার) থেকে , এটি সত্যই দাঁড়িয়েছে যে কাস্টম ক্যোয়ারীগুলি পুনরায় সেট করা না হওয়ার কারণে বেশিরভাগ সমস্যা দেখা দেয় (কাস্টম কোয়েরিগুলি মূল ক্যোয়ারী অনুসারে গ্লোবালগুলিকে পরিবর্তন করে)।

এ থেকে, এটি $postনির্ভরযোগ্য যে নির্ভরযোগ্য নয়। কোনও কাস্টম ক্যোয়ারির ব্যবহার করে এমন দুর্বল লিখিত টুকরো কোডটি $postবিশ্বব্যাপী পরিবর্তন করতে পারে, যার ফলস্বরূপ কিছু ভেঙে যাবে (সম্পর্কিত পোস্টগুলির মতো)।

কেবলমাত্র মুষ্টিমেয় ওয়ার্ডপ্রেস বিকাশকারীই মূল অভ্যন্তরীণ কার্যক্রমে যথেষ্ট পরিমাণে জ্ঞানবান এবং কী এড়াতে হবে এবং কী নয় তা জানেন। ব্যবহারকারীদের বৃহত্তর জনসংখ্যার কোনও ধারণা নেই যে ওয়ার্ডপ্রেস কোর কীভাবে কাজ করে।

এগুলি কেবল একটি থিম ডাউনলোড করে প্রয়োজনীয় যা করতে প্লাগইনগুলি ইনস্টল করে এমনকি একটি টিউটোরিয়াল থেকে কোড অনুলিপি করে। বলুন যে তারা একটি দুর্বল লিখিত প্লাগইন ইনস্টল করেছেন যা তাদের একক পোস্টে সম্পর্কিত পোস্টগুলিকে ভেঙে দেয়, তারা কীভাবে জানবে যে এর কারণ কী? তারা কি তাদের নিজেরাই বাছাই করতে সক্ষম হবে বা তারা এই সমস্যা সম্পর্কে থিম লেখককে ইমেল লেখার শততম ব্যক্তি, বা এই সাইটে কোনও প্রশ্ন পোস্ট করবে?

আমার প্রশ্ন: গ্লোবাল $postলাইকটি যদি অবিশ্বাস্য হয় তখন আপনি অন্যান্য আমদানি কোডের কারণে সৃষ্ট সমস্যার থেকে কীভাবে সুরক্ষা দিতে পারেন? আমাদের কি $postআদৌ গ্লোবাল ব্যবহার করা উচিত? বিকল্পগুলি কি?

এখানে পৌঁছানোর আগে আমার মনের ভাবটি ভাগ করে নেওয়ার জন্য: বিশ্বব্যাপী মূল ক্যোয়ারিতে পুনরায় সেট করা হচ্ছে কিনা তা নিশ্চিত করার জন্য আমি (এবং কিছু থিম এবং প্লাগইনগুলিতেও দেখেছি) ব্যবহার করেছি wp_reset_postdata()বা ব্যবহার wp_reset_query()করার আগে ভেবে দেখেছি । তবে আমার থিমটিতে আমার কোডটি কেন ফুলে উঠবে কারণ অন্য কেউ তার প্লাগইনটি সঠিকভাবে কোড করেনি? এবং যদি কেউ তাদের কাস্টম ক্যোয়ারীটি সঠিকভাবে পুনরায় সেট করেন তবে এই অপারেশনটি অপ্রয়োজনীয় দ্বিতীয়বার চালানো হবে, এটি ভাল নয়।$post$post

আমি যে দ্বিতীয় পদ্ধতিটির কথা ভেবেছিলাম তা হ'ল এর ব্যবহার করা $wp_queryএবং তার পদ্ধতিগুলি ব্যবহার করা, এরকম কিছু $wp_query->post

এ সম্পর্কে কোনও চিন্তা প্রশংসা করা হবে।


পোস্টটি পুনরায় সেট করা কেবল অন্যটির জন্য একটি অনুলিপি অনুলিপি করা হয়, আপনি নিজের কোডে এটি মিলিয়ন বার কল করতে পারেন এবং কোনও পারফরম্যান্স হিট দেখতে পান না, তাই আমি জানি না যে এটি সম্পর্কে ভাল কী নয়।
মিলো

উত্তর:


16

একটি দুঃখজনক সত্য: আপনি কখনই নিশ্চিত হতে পারবেন না যে কোনও কোড আপনার কোডটি ভেঙে দেবে না , এবং এটি রোধ করার জন্য আপনার করার মতো কিছুই নেই । বিশেষত ওয়ার্ডপ্রেসে, যেখানে সমস্ত কিছু বিশ্বব্যাপী।

এটি বলেছে, হ্যাঁ, গ্লোবাল $postসর্বাধিক ব্যবহৃত গ্লোবাল ভারগুলির মধ্যে একটি, সুতরাং এর জন্য বিশেষ যত্ন ব্যবহার করা ভাল ধারণা হতে পারে

আমার কোডে আমি খুব কমই সরাসরি বিশ্বব্যাপী অ্যাক্সেস করি $post

ইন একবচন প্রতিযোগিতা, আমি ব্যবহার get_queried_object()এবং সাধারণত পরীক্ষা যদি $postএকটি বৈধ WP_Postউদাহরণস্বরূপ:

$post = get_queried_object();

if ( ! $post instanceof \WP_Post ) {
   die( 'What the f**k?!' );
}

আমি $postসরাসরি যা অসাধারণ ক্ষেত্রে অ্যাক্সেস করি সেগুলিতেও আমি সেই চেকটি করি ।

বিবেচনা করুন যে get_queried_object()কিছু কোড ব্যবহার করলে অপ্রত্যাশিত মানটি ফিরে আসে query_posts, তবে ওহে, কেউ যদি নির্ভর করে এমন কোড ব্যবহার query_postsকরে তবে তাদের সাইটটি ব্রেক হলে তারা এটিকে প্রাপ্য :)

তদুপরি, আমি যদি কিছু শর্ত আশা করি তবে আমি তাদের জন্য পরীক্ষা করে নিই, যেমন নির্দিষ্ট পোস্টের ধরণ বা একটি নির্দিষ্ট স্থিতি।

আমার যদি আরও চেক এবং আরও জায়গায় প্রয়োজন হয় তবে আমি সেগুলি সম্পাদন করার জন্য একটি ফাংশন তৈরি করি:

function get_global_post() {
    global $post;
    if ( 
        ! $post instanceof \WP_Post
        || ! $post->post_type === 'mycpt'
        || ! in_array( $post->post_status, array( 'publish', 'private' ), true ) 
    ) {
        return false;
    }
    return $post;
}

$mypost = get_global_post();

if ( ! $mypost ) {
      die( 'What the f**k?!' );
}

কাস্টম ক্যোয়ারির ভিতরে থাকা অবস্থায়, লুপিংয়ের সময়, কলিং the_post()পোস্ট অবজেক্টটিকে পুনরায় সেট করে, তাই এটি ঠিক হওয়া উচিত। তারপরে wp_reset_postdata()কাস্টম ক্যোয়ারির পরে ফোন করা আমার দায়িত্ব , এবং আমি অবশ্যই এটি করি :)

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.