আমি কীভাবে নিরাপদে কোনও কাস্টম পোস্ট ধরণের নাম পরিবর্তন করব?


19

আমি 'পোর্টফোলিও' নামে একটি কাস্টম পোস্ট টাইপ করেছি তবে আমি এটি 'প্রকল্পগুলিতে' পরিবর্তন করতে চাই। নামটি নিরাপদে পরিবর্তন করতে এবং ড্যাশবোর্ডে কাস্টম পোস্ট ধরণের পোস্টগুলি নিখোঁজ হতে বাধা দিতে আমার সঠিক পদক্ষেপগুলি কী হতে হবে?

দ্রষ্টব্য: ইতিমধ্যে পোস্ট নেই portfolioতাই আমি শুধু স্যুইচ করতে পারবেন না portfolioসঙ্গে projects

/* Register Portfolio Post Type */
add_action('init', 'create_portfolio');

function create_portfolio() {

    $labels = array(
        'name' => __('Portfolio', 'post type general name'),
        'singular_name' => __('Project', 'post type singular name'),
        'add_new' => __('Add New', 'portfolio item'),
        'add_new_item' => __('Add New Project'),
        'edit_item' => __('Edit Project'),
        'new_item' => __('New Project'),
        'view_item' => __('View Project'),
        'search_items' => __('Search Projects'),
        'not_found' =>  __('Nothing found'),
        'not_found_in_trash' => __('Nothing found in Trash'),
        'parent_item_colon' => ''
    );

    $args = array(
        'labels' => $labels,
        'public' => true,
        'publicly_queryable' => true,
        'show_ui' => true,
        'query_var' => true,
        'rewrite' => true,
        'capability_type' => 'post',
        'hierarchical' => false,
        'menu_position' => null,
        'supports' => array('title','editor','thumbnail')
      ); 

    register_post_type( 'portfolio' , $args );
}

/* Register Skills Taxonomy */
register_taxonomy("Skills", array("portfolio"), array("hierarchical" => true, "label" => "Skills", "singular_label" => "Skill", "rewrite" => true));

/* Add Fields */
add_action("admin_init", "add_portfolio_fields");

function add_portfolio_fields(){
    add_meta_box("website_url", "Website URL", "website_url", "portfolio", "side", "low");
    add_meta_box("view_more", "View More", "view_more", "portfolio", "side", "low");
    add_meta_box("screenshot_name", "Screenshot Name", "screenshot_name", "portfolio", "side", "low");
    add_meta_box("thumbnail_name", "Thumbnail Name", "thumbnail_name", "portfolio", "side", "low");
    add_meta_box("thumbnail_alt", "Thumbnail Alt", "thumbnail_alt", "portfolio", "side", "low");
}

function website_url(){
    global $post;
    $custom = get_post_custom($post->ID);
    $website_url = $custom["website_url"][0];
    ?>
    <label>Website URL:</label>
    <input size="50" name="website_url" value="<?php echo $website_url; ?>" />
    <?php
}

function view_more() {
    global $post;
    $custom = get_post_custom($post->ID);
    $view_more = $custom["view_more"][0];
    ?>
    <label>View More:</label>
    <input size="50" name="view_more" value="<?php echo $view_more; ?>" />
    <?php
}

function screenshot_name() {
    global $post;
    $custom = get_post_custom($post->ID);
    $screenshot_name = $custom["screenshot_name"][0];
    ?>
    <label>Screenshot Name:</label>
    <input name="screenshot_name" value="<?php echo $screenshot_name; ?>" />
    <?php
}

function thumbnail_name() {
    global $post;
    $custom = get_post_custom($post->ID);
    $thumbnail_name = $custom["thumbnail_name"][0];
    ?>
    <label>Thumbnail Name:</label>
    <input name="thumbnail_name" value="<?php echo $thumbnail_name; ?>" />
    <?php
}

function thumbnail_alt() {
    global $post;
    $custom = get_post_custom($post->ID);
    $thumbnail_alt = $custom["thumbnail_alt"][0];
    ?>
    <label>Thumbnail Alt:</label>
    <input name="thumbnail_alt" value="<?php echo $thumbnail_alt; ?>" />
    <?php
}

add_action('save_post', 'save_portfolio_details');

function save_portfolio_details(){
    global $post;

    update_post_meta($post->ID, "website_url", $_POST["website_url"]);
    update_post_meta($post->ID, "view_more", $_POST["view_more"]);
    update_post_meta($post->ID, "screenshot_name", $_POST["screenshot_name"]);
    update_post_meta($post->ID, "thumbnail_name", $_POST["thumbnail_name"]);
    update_post_meta($post->ID, "thumbnail_alt", $_POST["thumbnail_alt"]);
}

/* Custom Columns */
add_action("manage_posts_custom_column",  "portfolio_custom_columns");
add_filter("manage_edit-portfolio_columns", "portfolio_edit_columns");

function portfolio_edit_columns($columns){
    $columns = array(
        "cb" => "<input type=\"checkbox\" />",
        "title" => "Project Title",
        "description" => "Description",
    );

    return $columns;
}

function portfolio_custom_columns($column){
    global $post;

    switch ($column) {
        case "description":
        the_excerpt();
        break;
    }
}

শুধু লেবেল প্রতিস্থাপন সম্পর্কে?
বাইনারনেট

শুধু লেবেল? আপনি ঠিক কী বলতে চাইছেন তা আমি নিশ্চিত নই তবে আমি এটির পুরোপুরি পুরোপুরি পরিবর্তন করতে পছন্দ করব।
দেশি

উত্তর:


2

আপনার পোর্টফোলিওটিতে এখনও কোনও পোস্ট না থাকলে।

এটা সত্যিই সহজ হবে। "পোর্টফোলিও" দিয়ে সবকিছুকে "প্রকল্পগুলিতে" নামকরণ করুন। আপনি কিছুই হারাবেন না এবং নামটি পরিবর্তন করবেন।

সম্পাদনা করুন:

বর্তমান পোস্টগুলি নিরাপদে রফতানি করতে এবং আপনার নতুন কাস্টম পোস্টের ধরণে এটি আমদানি করতে এই প্লাগইনটি ব্যবহার করে দেখুন: http://wordpress.org/extend/plugins/ptypeconverter/

সুতরাং পদক্ষেপগুলি হ'ল:

1 প্লাগইনটি ডাউনলোড ও ব্যবহার করুন: http://wordpress.org/extend/plugins/ptypeconverter/

2 আপনার কাস্টম পোস্টের ধরণ "পোর্টফোলিও" ফাইলটি কোথাও সংরক্ষণ করুন Copy উদাহরণস্বরূপ এটিকে কল করুন পোর্টফোলিও_পোস্ট_প্রকারব্যাকাকুপ.পিএফ

3 এখন আপনি নিশ্চিত হন যে কখন এই পদ্ধতিটি ব্যর্থ হয়। আপনি এটি পুনরুদ্ধার করতে পারেন।

4 " প্রকল্পগুলিতে " " পোর্টফোলিও " পরিবর্তন করুন

5 প্লাগইন এবং ভায়োলা দিয়ে পোস্টগুলি আমদানি করুন!

আশা করি এটি কাজ করে।


আহ, দুঃখিত উল্লেখ করা উচিত ছিল। portfolioইতিমধ্যে অনেকগুলি পোস্ট রয়েছে ।
দেশি

আমি উত্তর সম্পাদনা করেছি। গুডলাক!
ওয়েসলি চেউং

এটি একটি দুর্দান্ত প্লাগইন!
রিয়েলফ

1
এই প্লাগইনটি এখন আর সঠিকভাবে কাজ করছে না। আমি চেষ্টা করেছিলাম এবং এটি সমস্ত 'পুরানো' পোস্টের ধরণের পরিবর্তন করে না। তবে মাইএসকিএল সমাধান (উইলের উত্তর দিয়ে) ভাল কাজ করে।
honk31

দুই বছরে প্লাগিন আপডেট হয়নি।
rhand

18

আপনি সরাসরি মাইএসকিউএল দিয়ে এটি করতে পারেন।

UPDATE `wp_posts`
SET 
    # Update the post_type column
    `post_type` = REPLACE(`post_type`,'name_of_old_post_type','name_of_new_post_type'),
    # Update the urls
    `guid` = REPLACE(`guid`,'name_of_old_post_type','name_of_new_post_type')
WHERE `post_type` = 'name_of_old_post_type'

দুটি বিষয় লক্ষণীয়:

  1. আপনার কোডে এই পোস্টের ধরণের কোনও রেফারেন্স আপনাকে আপডেট করতে হবে (বলুন, টেম্পলেটগুলি, সিএমবি 2 সংজ্ঞা বা ট্যাক্সোনমি সংজ্ঞা)।
  2. আপনি যদি wp_postmetaসিরিয়ালযুক্ত অ্যারেগুলির মধ্যে এই পোস্টের প্রকারের কোনও রেফারেন্স সঞ্চয় করে রেখেছেন তবে আপনি কোনও সাধারণ আপডেট / রিপ্লেস করতে চান না কারণ এটি তাদের উড়িয়ে দেবে! ভাল, যদি না নতুন এবং পুরাতন উভয় পোস্ট টাইপের স্ট্রিংগুলি একই দৈর্ঘ্য হয়।

7

উইলের উত্তরটি আরও কিছুটা বাড়িয়ে দেওয়া ... এবং বিশেষত যদি আপনি এটি আপনার প্লাগইন থেকে করছেন:

global $wpdb;
$old_post_types = array('old_type' => 'new_type');
foreach ($old_post_types as $old_type=>$type) {
    $wpdb->query( $wpdb->prepare( "UPDATE {$wpdb->posts} SET post_type = REPLACE(post_type, %s, %s) 
                         WHERE post_type LIKE %s", $old_type, $type, $old_type ) );
    $wpdb->query( $wpdb->prepare( "UPDATE {$wpdb->posts} SET guid = REPLACE(guid, %s, %s) 
                         WHERE guid LIKE %s", "post_type={$old_type}", "post_type={$type}", "%post_type={$type}%" ) );
    $wpdb->query( $wpdb->prepare( "UPDATE {$wpdb->posts} SET guid = REPLACE(guid, %s, %s) 
                         WHERE guid LIKE %s", "/{$old_type}/", "/{$type}/", "%/{$old_type}/%" ) );
}

এখানে পরিবর্তনটি হ'ল সরাসরি নির্দেশিকায় পুরানো প্রকারটি প্রতিস্থাপন করা নয়, তবে কেবলমাত্র "পোস্ট_ টাইপ = ওল্ড_ টাইপ" বা "/ ওল্ড টাইপ /" উপস্থিত থাকলে প্রতিস্থাপন করা। এটি ভুলভাবে বৈধ স্লাগগুলি প্রতিস্থাপন এড়িয়ে চলে। (যেমন আপনার কাস্টম পোস্টের ধরণটি পোর্টফোলিও এবং কোনও পৃষ্ঠার স্লাগে এতে পোর্টফোলিও রয়েছে)

আরেকটি বিকল্প হ'ল এটির মতো কিছু করা:

global $wpdb, $wp_rewrite;
foreach ($old_post_types as $old_type=>$type) {
    $q = 'numberposts=-1&post_status=any&post_type='.$old_type;
    $items = get_posts($q);
    foreach ($items as $item) {
        $update['ID'] = $item->ID;
        $update['post_type'] = $type;
        wp_update_post( $update );
    }
}
$wp_rewrite->flush_rules();

আছে HTH!


ধন্যবাদ। এইটা কাজ করে. একটি ছোটখাটো জিনিস: লুপের দ্বিতীয় ক্যোয়ারির শেষ অংশটি "% post_type = {$ old_type}%" হওয়া উচিত, "% post_type = {$ টাইপ}%" নয়।
বেটি

3

ওয়ার্ডপ্রেস ডেটাবেস ক্যোয়ারী ব্যবহার করুন তবে সিরিয়ালযুক্ত অপশন ডেটাটি ভুলে যাবেন না

আমার জন্য যে পদ্ধতিটি কাজ করেছিল তা হ'ল ওয়ার্ডপ্রেস ডাটাবেসের মধ্যে অনুসন্ধান এবং প্রতিস্থাপন করা, তবে প্রক্রিয়াটিতে ক্রমিক বিকল্প ডেটা আপ না করার বিষয়টি নিশ্চিত করা। আমি খুঁজে পেয়েছি সবচেয়ে ভাল উপায় হ'ল নিরাপদ অনুসন্ধান এবং আন্তঃসংযোগ / এটি থেকে ডাটাবেস ইউটিলিটি প্রতিস্থাপন । কখনও শুধু একটি না SETpost_type = REPLACE(post_type ,'old_post_type','new_post_type')বুদ্ধিমান আপনি কি করছেন বা ধারাবাহিকভাবে তথ্য ভঙ্গ করবে যেহেতু এটি একটি চেকসাম রাখে এবং না সঠিকভাবে unserialize করতে সক্ষম হবে ছাড়া টাইপ জিজ্ঞাস্য।

এটি অন্ধভাবে অনুসরণ করার আগে সম্ভাব্য সমস্যা বিভাগটি পড়ুন

পদক্ষেপ 1 - নতুন নাম সহ আপনার ডেটাবেস নিরাপদে আপডেট করুন

  1. আপনার ডাটাবেসটিকে ব্যাকআপ করুন কারণ নিম্নলিখিত পরিবর্তনগুলিতে এটি দূষিত হওয়ার খুব সম্ভাবনা রয়েছে।
  2. নিরাপদ অনুসন্ধান ডাউনলোড এবং আনজিপ করুন এবং আন্তঃসংযোগ / এটি থেকে ডাটাবেস ইউটিলিটি প্রতিস্থাপন করুন
  3. নিষ্ক্রিয় ডিরেক্টরিটি আপনার ওয়েবরুটে যুক্ত করুন (এটি উপ-ডিরেক্টরিতেও কাজ করে)
  4. ডিরেক্টরিতে ব্রাউজ করুন, যেমন: /mywebsite.com/path/to/utility/directory/
  5. নির্দেশ অনুসরণ. আপনি যদি পরিবর্তনগুলি দেখতে প্যারানয়েড হন তবে 'ড্রাই-রান' ক্লিক করুন (আপনার কাছে পরিবর্তিত পোস্টের কয়েকটি পোস্ট থাকলেও শত শত লোক থাকবে)
  6. পরিবর্তনগুলি চূড়ান্ত করতে 'লাইভ রান' ক্লিক করুন।
  7. সুরক্ষার সমস্যা থেকে আপনার ওয়ার্ডপ্রেস ডিরেক্টরি থেকে নিরাপদ অনুসন্ধান ডিরেক্টরিটি সরিয়ে ফেলুন

পদক্ষেপ 2 - আপনার Permalink রিসেট করুন

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

পদক্ষেপ 3 - আপনার থিমের কাস্টম পোস্ট ধরণের টেম্পলেটগুলির নাম পরিবর্তন করুন

আপনি যদি আমার মতো হন এবং আপনি কাস্টম পোস্টের ধরণের টেম্পলেট তৈরি করেন তবে আপনাকে এগুলির নামকরণ করতে হবে বা আপনার কাস্টম পোস্টগুলি স্ক্রুযুক্ত দেখাবে। কেবল আপনার থিমে যান এবং কোনও ফাইলের সন্ধান করুন যার পুরাতন পোস্টের নামটির ফাইলের নাম রয়েছে এবং আপনার নতুন পোস্টের নামটি ব্যবহার করে ফাইলটির নাম পরিবর্তন করুন। উদাহরণস্বরূপ, আমি পরিবর্তন করতে হয়েছিল single-project-portfolio.phpকরার single-before-after.phpযখন আমি আমার পোস্টের প্রকারের পরিবর্তন project-portfolioকরতে before-after

পদক্ষেপ 5 - যে কোনও কোড আপডেট করুন

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

সবকিছু পরীক্ষা করুন

সম্ভাব্য সমস্যা (এই পদ্ধতিটি শুরু করার আগে পড়ুন)

সিন্ডিকেশন সমস্যা

যদি আপনার কাস্টম পোস্টের প্রকারগুলি সিন্ডিকেট করা থাকে তবে বুঝতে পারেন যে আপনার প্রাথমিক অনুসন্ধান এবং প্রতিস্থাপনটি আপনার পোস্টগুলির গাইডগুলিও পরিবর্তন করবে, যা সমস্ত গ্রাহককে পুরানো পোস্টগুলি নতুন হিসাবে দেখতে বাধ্য করবে। আমার সাথে এটি মোকাবেলা করার দরকার নেই, তবে আপনার যদি প্রয়োজন হয় তবে সেফ সন্ধানের ইউটিলিটি প্রক্রিয়াগুলি সারণীগুলি নিজেই বেছে নেওয়ার বিষয়টি বিবেচনা করুন, তারপরে নিম্নলিখিত কোয়েরিটি ব্যবহার করে কোনও অ-সিরিয়ালযুক্ত ডেটা ম্যানুয়ালি আপডেট করুন:

SET `post_type` = REPLACE(`post_type`,'old_post_type','new_post_type')
WHERE `post_type` LIKE '%old_post_type%';

এই সমস্ত তালিকা আপ খুব ঝরঝরে। শেষ পর্যন্ত বর্গ কোয়েরিটি সম্পূর্ণ হয় না, যেহেতু আপনি গাইড সম্পর্কে ভুলে গেছেন, তবে সেগুলি উইলের উত্তরে তালিকাভুক্ত। প্লাস আমি সাথে যাব না WHERE 'post_type' LIKE '%old_post_type%', আমি ব্যবহার WHERE 'post_type' = 'old_post_type'
করবো

0

আমার মন্তব্য করার খ্যাতি নেই তাই আমি এটি এখানে রাখব। উইলের উদাহরণ বাড়ানো। আমি LIKEs কে "=" এ পরিবর্তন করেছি এবং তাদের উভয়কে WHERE এ নির্দেশ করিpost_type

UPDATE `wp_posts`
    SET `guid` = REPLACE(`guid`,'old_post_type','new_post_type')
    WHERE `post_type` = 'old_post_type'    

UPDATE `wp_posts`
    SET `post_type` = REPLACE(`post_type`,'old_post_type','new_post_type')
    WHERE `post_type` = 'old_post_type'

এছাড়াও অ্যাডমিন> সেটিংস> পারমালিক্সে যেতে এবং "পরিবর্তনগুলি সংরক্ষণ করুন" টিপুন মনে রাখবেন। অন্যথায় আপনার লিঙ্কগুলি সম্ভবত ভেঙে যাবে।

আপনাকে কোনও 'একক পোস্ট-টাইপ' টেম্পলেট নামগুলি সম্পাদনা করতে হবে।

আপনার যা করা দরকার তা হ'ল এটি।


0

এখানে একটি খুব সহজ উপায়:

  1. ওয়ার্ডপ্রেস রফতানিকারী (সরঞ্জাম> রফতানি) চালান - কেবলমাত্র আপনি যে নামটির নামটি পরিবর্তন করতে চান তার প্রকারটি রফতানি করুন
  2. উত্পন্ন .xML ফাইলটি খুলুন এবং পুরানো পোস্ট টাইপের সমস্ত নাম নতুন নামে প্রতিস্থাপন করুন ("কাস্টম_পোস্ট_টাইপ" মেটা পাশাপাশি পারমালিঙ্ক ক্ষেত্রে)
  3. সম্পাদিত .xML এর মতো একই নামের সাথে আপনার নতুন পোস্টের প্রকারটি তৈরি করুন (তবে এটি ব্যর্থ হলে পুরানোটিকে এখনও রাখুন)
  4. ওয়ার্ডপ্রেস আমদানিকারকের মাধ্যমে সম্পাদিত .xML ফাইলটি আমদানি করুন (সরঞ্জামগুলি> আমদানি থেকে সরাসরি প্লাগইন পাওয়া যায়)
  5. নতুন পোস্টের ধরণে সামগ্রীটি উপস্থিত রয়েছে কিনা তা পরীক্ষা করুন এবং তারপরে পুরানোটি সরিয়ে দিন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.