Wp_defer_term_counting ব্যবহারের কোনও খারাপ দিক রয়েছে কি?


11

আমার 2 মিলিয়নেরও বেশি পোস্ট সহ একটি ওয়ার্ডপ্রেস ডাটাবেস রয়েছে। আমি যখনই কোনও নতুন পোস্ট সন্নিবেশ করলাম তখনই আমাকে কল করতে হবে wp_set_object_termsযা কার্যকর করতে দুই সেকেন্ডের বেশি সময় নেয়। আমি এই পোস্টটি জুড়ে এসেছি যা wp_defer_term_countingগণনা শব্দটি বাদ দেওয়ার জন্য কল করার পরামর্শ দেয় ।

আমি যদি এই পদ্ধতির ব্যবহার করি তবে ওয়ার্ডপ্রেসের কাজকর্মের গুরুতর পরিণতি আছে?

লিঙ্কটি মারা যাওয়ার ক্ষেত্রে পোস্ট থেকে কোড এখানে দেওয়া হয়েছে:

function insert_many_posts(){
  wp_defer_term_counting(true);
  $tasks = get_default_tasks(); 
  for ($tasks as $task){
     $post = array(
       'post_title' => $task[content],
       'post_author' => $current_user->ID,
       'post_content' => '',
       'post_type' => 'bpc_default_task',
       'post_status' => 'publish'
     );
     $task_id = wp_insert_post( $post );

     if ( $task[category] )
        //Make sure we're passing an int as the term so it isn't mistaken for a slug
        wp_set_object_terms( $task_id, array( intval( $category ) ), 'bpc_category' );
  }
}

উত্তর:


8

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


হ্যাঁ, প্রযুক্তিগতভাবে এর পরিণতি হতে পারে।

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

এই ক্ষেত্রে আপনি নিম্নলিখিত করতে হবে:

wp_defer_term_counting(true); //defer counting terms

//mass insertion or posts and assignment of terms here

wp_defer_term_counting(false); //count terms after completing business logic

এখন আপনার ক্ষেত্রে, আপনি যদি একবারে কেবল একটি পদ সন্নিবেশ করিয়ে থাকেন তবে স্থগিত মেয়াদ গণনা এখনও আপনার উপকারে আসবে তবে wp_defer_term_counting(false)আপনার অপারেশন আপনাকে এবং আপনার সাথে বা অন্য পক্ষগুলি অনুরোধের সাথে জড়িত থাকার অনুরোধটি ছেড়ে দিতে পারে যদি আপনি নির্ভর করেন তবে শর্তাধীন বা অন্য কোনও লজিক / প্রসেসিংয়ের জন্য মেয়াদ গণনা।

আরও ব্যাখ্যা করতে, আসুন আপনাকে নীচের কাজগুলি বলুন:

ধরুন আমাদের বলা একটি শ্রমশাসনের মধ্যে 3 টি পদ রয়েছে product_cat, এই শর্তগুলির জন্য আইডিগুলি যথাক্রমে 1 (পদটির নাম এ), 2 (পদটির নাম বি) এবং 3 (পদটির নাম সি)।

উপরের প্রতিটি পদটির ইতিমধ্যে একটি পদ গণনা রয়েছে 5(কেবল উদাহরণ হিসাবে)।

তাহলে এটি ঘটে ...

wp_defer_term_counting(true); //defer counting terms

$post_id = wp_insert_post($data);

wp_set_object_terms($post_id, array(1, 2, 3), 'product_cat');

তারপরে আপনার যুক্তিতে আপনি এই শব্দটি আনার সিদ্ধান্ত নিয়েছেন কারণ আপনি সেই পদটির সাথে যুক্ত অবজেক্টের পরিমাণ নির্ধারণ করতে এবং ফলাফলের ভিত্তিতে কিছু অন্যান্য ক্রিয়া সম্পাদন করতে চান।

সুতরাং আপনি এই ...

$terms = get_the_terms($post_id, 'product_cat');

//let's just grab the first term object off the array of returned results
//for the sake of this example $terms[0] relates to term_id 1 (A)
echo $terms[0]->count; //result 5

//dump output of $terms above
array (
  0 => 
  WP_Term::__set_state(array(
     'term_id' => 1,
     'name' => 'A',
     'slug' => 'a',
     'term_group' => 0,
     'term_taxonomy_id' => 1,
     'taxonomy' => 'product_cat',
     'description' => '',
     'parent' => 0,
     'count' => 5, //notice term count still equal to 5 instead of 6
     'filter' => 'raw',
  )),
)

আমাদের উদাহরণের ক্ষেত্রে আমরা বলেছিলাম যে শব্দের নাম এ (টার্ম_আইডি 1) এর সাথে ইতিমধ্যে 5 টি অবজেক্ট যুক্ত রয়েছে, অন্যের ওয়ার্ডে ইতিমধ্যে 5 এর একটি শব্দ গণনা রয়েছে।

সুতরাং আমরা প্রত্যাশা করব যে countউপরের জিনিসটির উপরের প্যারামিটারটি 6 হবে তবে আপনি যদি wp_defer_term_counting(false)অপারেশন করার পরে কল করেননি , তবে শর্তাবলী প্রযোজ্য শর্তগুলির জন্য আপডেট করা হয়নি (শব্দ A, B বা C))

সুতরাং এটি আপনার অপারেশনের পরে কল না করে কল করার ফলাফলwp_defer_term_counting(true)wp_defer_term_counting(false)

এখন প্রশ্ন অবশ্যই, আপনি কি এই প্রভাব ফেলবেন? আপনি যদি অন্য কোনও ক্রিয়াকলাপ সম্পাদনের get_the_termsজন্য countমানটি ব্যবহার করেন যেখানে শব্দটি পুনরুদ্ধার করে এমন কোনও ক্রিয়াকলাপ করার বা সম্পাদন করার দরকার নেই, তবে কী হবে? ঠিক সেই ক্ষেত্রে দুর্দান্ত, আপনার জন্য কোনও সমস্যা নেই

তবে ... যদি অন্য কারও কারও কাছে set_object_termsএই wp_set_object_terms()ক্রিয়াকলাপের দিকে ঝুঁকে পড়ে এবং তারা গণনাটি সঠিক হওয়ার উপর নির্ভর করে? এখন আপনি দেখতে পাবেন কোথায় পরিণতি হতে পারে।

অথবা যদি অনুরোধটি বন্ধ হয়ে যাওয়ার পরে, আরেকটি অনুরোধ সম্পাদিত হয় যা একটি ট্যাক্সোনমি শব্দটি পুনরুদ্ধার করে countএবং তাদের ব্যবসায়িক যুক্তিতে সম্পত্তিটি ব্যবহার করে ? এটা একটা সমস্যা হতে পারে।

যদিও এটির countমূল্যবোধগুলি খুব বেশি ক্ষতি হতে পারে তা আমরা পেতে পারি না, তবে আমাদের নিজস্ব দর্শনের উপর ভিত্তি করে এই জাতীয় ডেটা কীভাবে ব্যবহৃত হবে তা আমরা ধরে নিতে পারি না।

পাশাপাশি বিকল্প উত্তরে উল্লিখিত হিসাবে, বিভাগের তালিকার টেবিলে প্রদর্শিত গণনাও আপডেট করা হবে না।

প্রকৃতপক্ষে আপনি মেয়াদ গণনা স্থগিত করার পরে এবং আপনার অনুরোধটি শেষ হওয়ার পরে টার্মের গণনাগুলি আপডেট করার একমাত্র উপায় হ'ল ম্যানুয়ালি কল করা wp_update_term_count($terms, $taxonomy)বা অপেক্ষা করা যতক্ষণ না কেউ প্রদত্ত শ্রেণীবদ্ধের জন্য কোনও শব্দ সংজ্ঞা UI বা প্রোগ্রামগতভাবে যুক্ত করেন until

চিন্তার জন্য খাদ্য.


1
আমি মনে করি আপনি এই চমকপ্রদ যোগফল। এটি নির্ভর করে যদি আপনি প্রকৃত শব্দ গণনাটি ব্যবহার করতে যাচ্ছেন যতদূর আমি সম্পর্কিত উত্স কোডের মাধ্যমে খনন করতে পারি
পিটার গুসেন

3
হ্যাঁ আমি ভেবেছিলাম এটি একটি আকর্ষণীয় প্রশ্ন তাই আমাকে আরও গভীর খনন করতে হবে ... একই অনুরোধের সময় এবং অনুরোধটি শেষ হওয়ার পরেও যদি আপনার একটি সঠিক শব্দ গণনা প্রয়োজন হয় তবেই কেবল সমস্যাটি মনে হয়। এটি সম্পর্কে ভাবতে আসুন, যদি কেউ যে কোনও গুরুতর ব্যবসায়িক যুক্তির জন্য শব্দ শর্তের উপর নির্ভর করে তবে আপনি নিশ্চয়তা দিতে পারবেন না যে আপনি যা দেখছেন তা আসলে সঠিক গণনা। আপনাকে wp_update_term_count()মানটি ব্যবহার করার আগে ম্যানুয়ালি চেষ্টা করে আপডেট করতে হবে (উদাঃ )। আমি জানি না যে কেস হবে।
আদম

খুব ব্যাপক উত্তর। যেহেতু আমি আসলে একটি ভর সন্নিবেশ করছি, আপনি যা ব্যাখ্যা করেছেন তা থেকে আমার পরে শর্তগুলি লুপ wp_update_term_count($terms, $taxonomy)করে প্রতিটি কল করতে হবে, সঠিক?
ক্যালেনজি

2
ওয়ার্ডপ্রেস কখনই কাউকে অভদ্র জাগরণ দিতে ব্যর্থ হয়। আমি অবশ্যই স্বীকার করতে পারি যে, সাধারণভাবে সাধারণভাবে প্রায়
পুরো

1
আপনি ভর সন্নিবেশ করছেন তাহলে, আমি শুধু would wp_defer_term_counting(true), আপনি কি ভর ঢোকান তারপর wp_defer_term_counting(false)। কেবলমাত্র আপনি wp_update_term_count()সরাসরি কল করার কারণ হ'ল যদি আপনি শব্দ_আইডগুলি কোনও ক্ষণস্থায়ী জায়গায় সংরক্ষণ করেন তবে সম্পূর্ণ গণনা স্থগিত করুন তবে উদাহরণস্বরূপ পর্দার পিছনে একটি এজেএক্স অনুরোধ বন্ধ করুন, ক্ষণস্থায়ীকে ধরে ফেলুন wp_update_term_count()বা ম্যানুয়ালি কল করুন বা ক্রোন-জব বা অনুরূপ ব্যবহার করুন। আপনি যদি একই অনুরোধে থাকেন (মৃত্যুদণ্ড কার্যকর করার আগে পুরোপুরি সমাপ্ত হওয়ার আগে) তবে যাইহোক হুডের নীচে wp_defer_term_counting(false)কল wp_update_term_count()করা।
আদম

0

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

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