1. ডাব্লুপিউকিউয়ারি চালানোর আগে ক্যোরি সেট করুন
এটি এসকিউএল ডাটাবেসে চালিত হওয়ার আগে, কোয়েরি পরিবর্তন করার একমাত্র সুযোগ অবশ্যই, ন্যূনতমতে ডাটাবেস প্রশ্নগুলি রাখার চেষ্টা করার সময় এটি মনে রাখা সবচেয়ে গুরুত্বপূর্ণ বিষয় বলে মনে হয়।
সাধারণ প্রশ্নগুলি
একটি সাধারণ ক্যোয়ারির জন্য, ওয়ার্ডপ্রেস wp()
ফাংশনটি ব্যবহার করে , যা ঘুরে ফিরে কল করে $wp->main( $query_vars )
। শর্তসাপেক্ষ ট্যাগগুলি থেকে "is_ ভেরিয়েবল" সেট করার আগে সেট করা হয় WP_Query->get_posts()
যা এটিকে মাইএসকিউএল ডাটাবেস কোয়েরিতে রূপান্তর করে এবং শেষ পর্যন্ত এগুলিকে $ wp_query অবজেক্টে সংরক্ষণ করে। এসকিউএল ডাটাবেসে এটি চালানোর আগে ক্যোয়ারী ফিল্টার করা সম্ভব ।
pre_get_posts
ক্রিয়াটি এই প্রক্রিয়ার মধ্যে হুক্স, আগে এটি প্রেরণ করা আপনি কোয়েরি পরিবর্তন করতে সক্ষম হবেন WP_Query->get_posts()
।
উদাহরণস্বরূপ, আপনি যদি "বৈশিষ্ট্যযুক্ত" বিভাগে পোস্টগুলির জন্য ক্যোয়ারী ফিল্টার করতে চান তবে আপনি শর্তযুক্ত ট্যাগটি ব্যবহার করতে add_action( 'pre_get_posts', 'your_function_name' );
এবং এর মধ্যে অন্তর্ভুক্ত করবেন ।in_category
your_function_name
function your_function_name( $query ) {
if ( $query->in_category( 'featured' ) && $query->is_main_query() ) {
// Replace 123 with the category ID of the featured category.
$query->set( 'cat', '123' );
}
}
add_action( 'pre_get_posts', 'your_function_name' );
দেখুন প্লাগইন এপিআই / অ্যাকশন রেফারেন্স / পোস্ট «ওয়ার্ডপ্রেস কোডেক্স পেতে প্রাক
পৃষ্ঠাগুলি অনুরোধ
পৃষ্ঠার টেম্পলেটগুলির যেমন "বৈশিষ্ট্যযুক্ত" বিভাগের জন্য সংরক্ষণাগার পৃষ্ঠার জন্য, শর্তাধীন ট্যাগগুলি pre_get_posts
ফিল্টার থেকে কাজ করবে না । উদাহরণস্বরূপ, আপনি is_category
সংরক্ষণাগার পৃষ্ঠার জন্য যাচাই করতে ব্যবহার করতে পারবেন না কারণ ডাব্লুপি_কিউয়ারি চলছে না।
পরিবর্তে, আপনাকে পৃষ্ঠার অনুরোধগুলির জন্য মূল ক্যোয়ারী পরিবর্তন করতে হবে new WP_Query
যা এমন কিছু দেখাচ্ছে $query = new WP_Query( 'cat=123' );
। এটি শুরু থেকে উপযুক্ত যুক্তি দিয়ে ক্যোরি চালায়।
দেখুন ক্লাস রেফারেন্স / ডাব্লু ক্যোয়ারী «ওয়ার্ডপ্রেস কোডেক্স
২. ডাটাবেসে সংরক্ষণ করা
wp_insert_post_data
আপনার কাস্টম পোস্ট টাইপের সাথে সম্পর্কিত কেবলমাত্র $ ডেটাতে ফিরে এসেছে তা নিশ্চিত করে আপনি ফিল্টারটি ব্যবহার করতে পারেন wp_insert_post
। আপনার কাস্টম পোস্টের প্রকারটি পরীক্ষা করার জন্য শর্তসাপেক্ষ বিবৃতি অন্তর্ভুক্ত করার বিষয়ে নিশ্চিত হন sure
প্লাগইন এপিআই / ফিল্টার রেফারেন্স / ডাব্লুপিপি dataোকান পোস্ট ডেটা «ওয়ার্ডপ্রেস কোডেক্স
এই হুকটিwp_insert_post
ফাংশন দ্বারা ডাকা হয় , যখন আপনি নিজের কাস্টম পোস্ট প্রকারটি আপডেট করেন, সাধারণত একটি খসড়া সংরক্ষণ বা পোস্ট প্রকাশের মাধ্যমে ডাকা হয় wp_update_post ।
আপনাকে এটি নিজেই বেঞ্চমার্ক করতে হবে যদিও ডেটাবেসে আপডেট হওয়া ডেটা হ্রাস করার অনুকূলিতকরণের তাত্পর্য হিসাবে আমি ব্যক্তিগতভাবে বলতে পারি না।
৩. কাস্টম পোস্টের ধরণগুলি কার্য সম্পাদনকে প্রভাবিত করে?
আমার অভিজ্ঞতায়, কাস্টম পোস্টের ধরণের সামগ্রী সামগ্রী পরিচালনার জন্য একটি শক্তিশালী সরঞ্জাম। আমি কম উপায় সংস্থান ব্যবহার করতে পারে এমনভাবে অনুমতি দেয় এমন সমস্ত পদ্ধতিতে পোস্ট পরিচালনা করার অন্য কোনও উপায় সম্পর্কে আমি জানি না। আমি ব্যক্তিগতভাবে যেখানেই সম্ভব প্রশ্নের তৈরি সংখ্যা হ্রাস করার উপায়গুলি সন্ধানের জন্য ব্যক্তিগতভাবে ফোকাস করব।
পারমালিঙ্ক কাঠামোর সাথে সম্পর্কিত কোনও পারফরম্যান্স সমস্যা থাকত যখন এটি সংখ্যার পরিবর্তে পাঠ্য দিয়ে শুরু হয় তখন এটি হিট করে। 3 এটি বিশেষত বিপুল সংখ্যক পৃষ্ঠাগুলি হোস্ট করার সাইটের জন্য সমস্যাজনক ছিল তবে ওয়ার্ডপ্রেস সংস্করণ ৩.৩ থেকে এটি সমাধান হয়েছে।
আমি কেবল এখানে পারমালিক্স আনছি কারণ স্লাগ সাধারণত পারমলিংক কাঠামোর প্রথম অংশ যা সংস্করণ 3.3 এর আগে পারফরম্যান্সকে প্রভাবিত করতে পারে বা নাও পারে। এ ছাড়া আমি কাস্টম পোস্ট ধরণের ব্যবহার থেকে উত্পন্ন কোনও পারফরম্যান্স সমস্যা সম্পর্কে সচেতন নই।
অন্যান্য কর্মক্ষমতা বিকল্প
Transients
এটি আপনার কোডে ন্যূনতম প্রশ্নের রাখার জন্য একটি প্রতিস্থাপন নয়, কিন্তু আপনি ব্যবহার করতে পারেন set_transient কিছু সময়ের জন্য প্রশ্নের সঞ্চয় করতে যাতে নতুন প্রশ্নের প্রয়োজনীয় নয়। ডেভ ক্লিমেন্টসের পোস্টে ব্যবহৃত উদাহরণটি এখানে । এছাড়াও, নোট করুন যে save_post
কোনও প্রদত্ত পোস্টের ধরণটি আপডেট হওয়ার পরে অস্থায়ীটি মুছতে তিনি কোনও পদক্ষেপ যুক্ত করার পরামর্শ দিয়েছেন।
<?php // IN THE SPOTLIGHT QUERY
if( false === ( $its_query = get_transient( 'its_query' ) ) ) {
$pttimestamp = time() + get_option('gmt_offset') * 60*60;
$its_query = new WP_Query( array(
'post_type' => 'spotlight',
'posts_per_page' => 1,
'post__not_in' => $do_not_duplicate,
'meta_query' => array(
array(
'key' => '_hpc_spotlight_end_time',
'value' => $pttimestamp,
'compare' => '>'
)
)
) );
set_transient( 'its_query', $its_query, 60*60*4 );
}
if( have_posts() ) { // HIDE SECTION IF NO CURRENT ITS FEATURE ?>
// LOOP GOES HERE: NOT IMPORTANT TO EXAMPLE
<?php } ?>
আরও ক্যোয়ারী অপ্টিমাইজেশান
টমাস গ্রিফিনের তার অপ্টিমাইজ ওয়ার্ডপ্রেস কোয়েরি টিউটোরিয়ালটিতে কয়েকটি ভাল টিপস রয়েছে । এখানে তার পরামর্শগুলির একটি সংক্ষিপ্ত তালিকা:
'cache_results' => false
যদি আপনার সার্ভার মেমকেচডের মতো অবিরাম ক্যাশে ব্যবহার না করে তবে এক-অফ ক্যোয়ারী সেট করুন । ওয়ান-অফ ক্যোয়ারীগুলি "এমন কোয়েরি হিসাবে বর্ণনা করা হয় যা খুব অল্প পরিমাণে ডেটা দেখানোর জন্য ব্যবহৃত হয় It এটি এমন হতে পারে যে আপনি কেবল বর্তমান পোস্টের সাথে সম্পর্কিত লিঙ্কযুক্ত পোস্টের শিরোনাম প্রদর্শন করতে চান, বা আপনি নির্বাচনের জন্য পোস্টের একটি ড্রপডাউন প্রদর্শন করতে চাইতে পারেন একটি নির্দিষ্ট বিকল্প সেটিংস। "
তার উদাহরণ: $query = get_posts( array( 'posts_per_page' => 1,
'cache_results' => false ) );
'no_found_rows' => true
পৃষ্ঠা নির্ধারণের প্রয়োজন নেই যেখানে সেট করুন । এটি "মাইএসকিউএলকে ফলাফল গণনা করে বাইপাস করবে আমাদের প্যাফিকেশন দরকার কিনা তা দেখার জন্য।"
তার উদাহরণ: $query = new WP_Query( array( 'posts_per_page' => 1,
'no_found_rows' => true ) );
পোস্ট আইডির অনুসন্ধান কেবলমাত্র যদি আপনার এটির প্রয়োজন 'fields' => 'ids'
হয় get_posts
। এটি ডেটাবেসের বিবরণ «ওয়ার্ডপ্রেস কোডেক্সের দিকে নজর দিলে ডেটা পরিমাণে উল্লেখযোগ্যভাবে হ্রাস করা উচিত, যা প্রতি পোস্টে যথেষ্ট is
তার উদাহরণ: $query = get_posts( array( 'posts_per_page' => 1,
'fields' => 'ids' ) );
এই শেষ টিপটি ছাড়াও, আপনি যখন get_post_field ব্যবহার করে কেবল এক বা কয়েকটি পোস্ট ক্ষেত্র প্রয়োজন তখন একই যুক্তি প্রয়োগ করা যেতে পারে ।
কীভাবে ক্যোয়ারী কাজ করে তার একটি দৃ understanding় বোঝা থাকা অপরিহার্য। আপনি আপনার প্রশ্নের সাথে আরও সুনির্দিষ্ট হতে পারেন, আপনি আপনার এসকিউএল ডাটাবেস থেকে কম কাজের দাবি করবেন। এর অর্থ ডাটাবেস অনুসন্ধান পরিচালনা করার জন্য বিশাল সম্ভাবনা রয়েছে। কাস্টম ক্যোয়ারীগুলি যেখানে চালিত হয় সেদিকে সতর্ক থাকুন (এটি কোনও অ্যাডমিন পৃষ্ঠা?), সরাসরি অনুসন্ধানগুলিতে যথাযথ স্যানিটাইজেশন ব্যবহার করুন এবং দেশীয় ওয়ার্ডপ্রেস ফাংশনগুলি ব্যবহার করার চেষ্টা করুন যেখানে এটি আপনাকে একই কর্মক্ষমতা অর্জন করতে দেয়।