পোস্টের শিরোনাম থেকে স্লাগগুলি পুনরায় জেনারেট করুন


14

পোস্টের শিরোনাম পরিবর্তন করার পরে কি স্লাগগুলি প্রোগ্রামিমেটিকভাবে পুনরায় জেনারেট করা সম্ভব? অসংখ্য পোস্ট শিরোনাম আপডেট করা হয়েছিল এবং শিরোনামটির সাথে স্লাগ আপডেট করা হয়নি তাই আমাকে এই সমস্ত স্লাগগুলি পুনরায় জন্মানোর দরকার।


আমি এটি বেশ কয়েকবার করতে হয়েছিল এবং দেখতে পেয়েছি যে বিভিন্ন সার্ভার পরিবেশের মধ্যে যেখানে এটি বড় অ্যারেগুলি পরিচালনা করতে পারে না (নম্বরপোস্টগুলি সীমাহীন হিসাবে সেট করা আছে) বা wp_update_post বারবার বড় মেমরির ব্যবহার করে কল করে যা এটি পৃষ্ঠায়িতকরণের সাথে ডাব্লুপি_কিউয়ারিতে কল করে এবং ব্যবহার করে p ডাব্লুপিডিবি যে এটি আরও পরিচালনাযোগ্য এবং পারফরম্যান্ট। আমি অনুরূপ পোস্টে কোডের নমুনা সরবরাহ করেছি ।
codearachnid

উত্তর:


17

হ্যা এটা সম্ভব.

নমুনা কোড, পরীক্ষা এবং পরিশোধিত করতে হবে:

// 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
            )
        );
    }
}

আমি কেবল এটি তৈরি করেছি, সম্ভবত কিছু ত্রুটি রয়েছে এবং উদাহরণস্বরূপ, তবে এটি আপনাকে ধারণা দেবে। এছাড়াও, এটি কিছুটা সময় নিতে পারে, তাই আপডেটটিকে ছোট অংশগুলিতে বিভক্ত করা কার্যকর হতে পারে।


1
হুঁ ... আমার অভিজ্ঞতা থেকে, এটি কাজ করে না। post_nameআর্গুমেন্টের দ্বারা উপেক্ষা করা হয় wp_update_postকোর 3.9 সংস্করণে অন্তত
আলেক্সান্ডার Bourlier

বর্তমানে, ফাংশনটির post_nameমধ্যে উপেক্ষা করা wp_update_post()হয়, তবে আপডেট পোস্টটি wp_insert_post()ফাংশনের জন্য আহ্বান জানালে এটি বিবেচনায় নেওয়া হয় : এর অর্থ হল যে নতুন স্লাগটিকে আপডেটে পাস করার ফলে পোস্টটি আপডেট হওয়ার জন্য এটি কার্যকরভাবে পরিবর্তিত হবে।
এরেনর পাজ

2

এই প্লাগইনটিও কাজটি করে: http://www.jerrytravis.com/598/wordpress-plugin-to-generate-post-slugs

যাইহোক, এটি কেবল পোস্টগুলির জন্য যেমন এখনও স্লাগ নেই, আপনার যদি স্লাগগুলি পুনরায় জন্মানোর প্রয়োজন হয় তবে প্লাগইনে নিম্নলিখিত লাইনটি সম্পাদনা করুন:

if ($post->post_name == "") {

উদাহরণস্বরূপ, আপনি এটিকে পরিবর্তন করতে পারেন:

if (true) {


1

আমি তোসকো দ্বারা প্রস্তাবিত পদ্ধতিটি চেষ্টা করছিলাম, যা "সহজাত", তবে অনেক ক্ষেত্রে এটি কাজ করে না (সিএফ কোর কোডটি "অনেক ক্ষেত্রে" দ্বারা আমি কী বোঝাতে চাইছি তা পেতে)।

কোডটি সন্ধান করে, আমি wp_insert_post_dataফিল্টার wp_update_postহুকটি পেয়েছি, যা ডাটাবেসটিতে পোস্ট সন্নিবেশ করার আগে ঠিক ফাংশন দ্বারা ডাকা হয়েছিল ।

এই ফিল্টারটিকে কল করে এবং এর মান পরিবর্তন করে $data['post_name']আমি এটি সঠিকভাবে কাজ করতে সক্ষম হয়েছি। ওয়ার্ডপ্রেস দুর্দান্ত তবে খুব খারাপভাবে ডকুমেন্টেড ...

আমি ডকুমেন্টেশন সম্পাদনা করেছি , যাতে প্রয়োজনে আরও লোকেরা এই কাজটি খুঁজে পেতে পারে।


আপনি কী উল্লেখ করতে পারেন wp_update_post পোস্টের নামটি ওভাররাইট করে? এটি হওয়ার কারণটি আমি দেখতে পাচ্ছি কেবলমাত্র যদি ব্যবহারকারী পোস্ট-নামটি সংশোধন করার চেষ্টা করছেন কেবলমাত্র একটি অবদানকারী (বা একই স্তরের) যদি সেই ক্ষেত্রে সেই ব্যবহারকারীকে স্লাগ পরিবর্তন করার অনুমতি না দেওয়া হয় তবে আপনি কি অন্য কোনও মামলা খুঁজে পেয়েছেন যাতে পোস্টের নাম ওভাররাইট করা হয়?
জেএনঘি - আলেকজান্দ্রু জান্তিয়া

হ্যাঁ এটি করার সঠিক উপায়। আপনাকে ধন্যবাদ @ অ্যালেক্সানড্রে
ব্যবহারকারী 88731

-1

আপনার যদি প্রয়োজন হয় তবে আপনি সরাসরি এটি 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' - যা আপনার আপডেটটি কেবল ওয়ার্ক কমার্স পণ্যগুলিতে রাখে; আপনি এই কোয়েরিতে কী সীমাবদ্ধ রাখতে চান তা নির্ধারণ করা উচিত।

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