পোস্টের শিরোনাম পরিবর্তন করার পরে কি স্লাগগুলি প্রোগ্রামিমেটিকভাবে পুনরায় জেনারেট করা সম্ভব? অসংখ্য পোস্ট শিরোনাম আপডেট করা হয়েছিল এবং শিরোনামটির সাথে স্লাগ আপডেট করা হয়নি তাই আমাকে এই সমস্ত স্লাগগুলি পুনরায় জন্মানোর দরকার।
পোস্টের শিরোনাম পরিবর্তন করার পরে কি স্লাগগুলি প্রোগ্রামিমেটিকভাবে পুনরায় জেনারেট করা সম্ভব? অসংখ্য পোস্ট শিরোনাম আপডেট করা হয়েছিল এবং শিরোনামটির সাথে স্লাগ আপডেট করা হয়নি তাই আমাকে এই সমস্ত স্লাগগুলি পুনরায় জন্মানোর দরকার।
উত্তর:
হ্যা এটা সম্ভব.
নমুনা কোড, পরীক্ষা এবং পরিশোধিত করতে হবে:
// get all posts
$posts = get_posts( array ( 'numberposts' => -1 ) );
foreach ( $posts as $post )
{
// check the slug and run an update if necessary
$new_slug = sanitize_title( $post->post_title );
if ( $post->post_name != $new_slug )
{
wp_update_post(
array (
'ID' => $post->ID,
'post_name' => $new_slug
)
);
}
}
আমি কেবল এটি তৈরি করেছি, সম্ভবত কিছু ত্রুটি রয়েছে এবং উদাহরণস্বরূপ, তবে এটি আপনাকে ধারণা দেবে। এছাড়াও, এটি কিছুটা সময় নিতে পারে, তাই আপডেটটিকে ছোট অংশগুলিতে বিভক্ত করা কার্যকর হতে পারে।
post_name
আর্গুমেন্টের দ্বারা উপেক্ষা করা হয় wp_update_post
কোর 3.9 সংস্করণে অন্তত
post_name
মধ্যে উপেক্ষা করা wp_update_post()
হয়, তবে আপডেট পোস্টটি wp_insert_post()
ফাংশনের জন্য আহ্বান জানালে এটি বিবেচনায় নেওয়া হয় : এর অর্থ হল যে নতুন স্লাগটিকে আপডেটে পাস করার ফলে পোস্টটি আপডেট হওয়ার জন্য এটি কার্যকরভাবে পরিবর্তিত হবে।
এই প্লাগইনটিও কাজটি করে: http://www.jerrytravis.com/598/wordpress-plugin-to-generate-post-slugs
যাইহোক, এটি কেবল পোস্টগুলির জন্য যেমন এখনও স্লাগ নেই, আপনার যদি স্লাগগুলি পুনরায় জন্মানোর প্রয়োজন হয় তবে প্লাগইনে নিম্নলিখিত লাইনটি সম্পাদনা করুন:
if ($post->post_name == "") {
উদাহরণস্বরূপ, আপনি এটিকে পরিবর্তন করতে পারেন:
if (true) {
আমি তোসকো দ্বারা প্রস্তাবিত পদ্ধতিটি চেষ্টা করছিলাম, যা "সহজাত", তবে অনেক ক্ষেত্রে এটি কাজ করে না (সিএফ কোর কোডটি "অনেক ক্ষেত্রে" দ্বারা আমি কী বোঝাতে চাইছি তা পেতে)।
কোডটি সন্ধান করে, আমি wp_insert_post_data
ফিল্টার wp_update_post
হুকটি পেয়েছি, যা ডাটাবেসটিতে পোস্ট সন্নিবেশ করার আগে ঠিক ফাংশন দ্বারা ডাকা হয়েছিল ।
এই ফিল্টারটিকে কল করে এবং এর মান পরিবর্তন করে $data['post_name']
আমি এটি সঠিকভাবে কাজ করতে সক্ষম হয়েছি। ওয়ার্ডপ্রেস দুর্দান্ত তবে খুব খারাপভাবে ডকুমেন্টেড ...
আমি ডকুমেন্টেশন সম্পাদনা করেছি , যাতে প্রয়োজনে আরও লোকেরা এই কাজটি খুঁজে পেতে পারে।
আপনার যদি প্রয়োজন হয় তবে আপনি সরাসরি এটি mysql এ করতে পারেন। (আমাদের ওয়াওকমার্স সাইটে হাজার হাজার পণ্য রয়েছে 100):
update wp_posts set post_name = concat(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(lower(post_title), '"', ''), "'", ''), ",", '-'), " ", '-'), "&", ''), ";", ''), "@", ''), ".", ''), ":", ''), "/", ''), "+", ''), "(", ''), ")", ''), "--", '-'), "---", '-'), "--", '-'), "--", '-'), '-', id) where post_type = 'product';
যেখানে post_type = 'product' - যা আপনার আপডেটটি কেবল ওয়ার্ক কমার্স পণ্যগুলিতে রাখে; আপনি এই কোয়েরিতে কী সীমাবদ্ধ রাখতে চান তা নির্ধারণ করা উচিত।