मैं कस्टम पोस्ट प्रकार के नाम को सुरक्षित रूप से कैसे बदलूं?


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 अपने कस्टम पोस्ट प्रकार "पोर्टफोलियो" फ़ाइल को कहीं सेव करें। उदाहरण के लिए इसे कॉल करें पोर्टफोलियो_पोस्ट_टाइप करेंबेकअप। एफपी

3 अब आप सुनिश्चित हैं कि जब यह विधि विफल हो जाती है। आप इसे पुनर्प्राप्त कर सकते हैं।

4 " पोर्टफोलियो " को " प्रोजेक्ट्स " में बदलें

5 प्लगइन और viola के साथ पदों को आयात करें!

आशा है कि यह काम करता है।


आह, सॉरी का उल्लेख करना चाहिए था। portfolioपहले से ही बहुत सारे पद हैं ।
देसी

मैंने उत्तर संपादित किया। सौभाग्य!
वेस्ले चेउंग

यह एक शानदार प्लगइन है!
वास्तविक

1
यह प्लगइन अब ठीक से काम नहीं कर रहा है। मैंने इसे आजमाया और इसने सभी 'पुराने' पोस्ट प्रकारों को नहीं बदला। लेकिन mysql समाधान (विल द्वारा उत्तर) ठीक काम करता है।
Honk31

दो साल में प्लगिन को अपडेट नहीं किया गया है।
खंड

18

आप इसे सीधे MySQL के साथ भी कर सकते हैं।

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

यहां परिवर्तन सीधे गाइड में पुराने प्रकार को प्रतिस्थापित नहीं करने के लिए है, लेकिन केवल अगर "post_type = old_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 = {$ type}%"।
बेटी

3

एक वर्डप्रेस डेटाबेस क्वेरी का उपयोग करें, लेकिन सीरियल ऑप्शन डेटा के बारे में मत भूलना

मेरे लिए काम करने का तरीका वर्डप्रेस डेटाबेस में खोज करना और बदलना था, लेकिन इस प्रक्रिया में क्रमबद्ध विकल्प डेटा को खराब नहीं करना सुनिश्चित करता है। सबसे अच्छा तरीका मैंने पाया है कि सुरक्षित खोज का उपयोग करें और डेटाबेस उपयोगिता को इंटरकनेक्ट / इट से बदलें । कभी भी एक SETपोस्ट_टाइप = REPLACE(पोस्ट_टाइप ,'old_post_type','new_post_type')टाइप क्वेरी न करें, बिना यह जाने कि आप क्या कर रहे हैं या क्रमबद्ध डेटा टूट जाएगा क्योंकि यह एक चेकसम रखता है और ठीक से अनसुना नहीं कर पाएगा।

आँख बंद करके इस से पहले संभावित मुद्दे अनुभाग पढ़ें

चरण 1 - नए नाम के साथ अपने डेटाबेस को सुरक्षित रूप से अपडेट करें

  1. अपने डेटाबेस का बैकअप लें क्योंकि निम्नलिखित परिवर्तनों में इसे भ्रष्ट करने की बहुत वास्तविक क्षमता है।
  2. डाउनलोड करें और सुरक्षित खोज को अनज़िप करें और डेटाबेस उपयोगिता को इंटरकनेक्ट / इट से बदलें
  3. निकाले गए निर्देशिका को अपने वेबरूट में जोड़ें (यह उपनिर्देशिकाओं में भी काम करता है)
  4. निर्देशिका में ब्राउज़ करें, जैसे: /mywebsite.com/path/to/utility/directory/
  5. निर्देशों का पालन करें। यदि आप परिवर्तन देखने के लिए पागल हैं तो 'ड्राई-रन' पर क्लिक करें (यदि बदले हुए पोस्ट प्रकार के कुछ पोस्ट भी हैं तो सैकड़ों होंगे)
  6. परिवर्तनों को अंतिम रूप देने के लिए 'लाइव रन' पर क्लिक करें।
  7. सुरक्षा मुद्दे के बाद से अपने वर्डप्रेस निर्देशिका से सुरक्षित खोज निर्देशिका को हटा दें

चरण 2 - अपने Permalinks रीसेट करें

यदि आप पर्मलिंक्स का उपयोग कर रहे हैं, तो आपके डेटाबेस के अपडेट आपके कस्टम पोस्ट प्रकारों पर आपके रीडायरेक्ट को खराब कर देंगे। हालाँकि, एक आसान फ़िक्स है, बस वर्डप्रेस सेटिंग्स / पेरालिंक्स में जाएं और वर्तमान सेटिंग पर ध्यान दें (मेरा 'पोस्ट नेम' था)। फिर डिफ़ॉल्ट पर वापस जाएँ, 'सहेजें' पर क्लिक करें, फिर पिछली सेटिंग पर वापस जाएँ, फिर फिर से सहेजें। आपने अभी-अभी अपने रीडायरेक्ट मुद्दे तय किए हैं।

चरण 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%';

यह सब सूचीबद्ध करने के लिए बहुत साफ है। अंत में sql क्वेरी को छोड़कर पूरा नहीं हुआ है, क्योंकि आप गाइड के बारे में भूल गए हैं, लेकिन वे विल्स उत्तर में सूचीबद्ध हैं। इसके अलावा WHERE 'post_type' LIKE '%old_post_type%', मैं साथ नहीं जाऊंगा , मैं उपयोग करूंगा WHERE 'post_type' = 'old_post_type', क्योंकि आपका रास्ता कुछ अन्य प्रकार के पोस्ट को भी बदल सकता है ..
honk31

0

मेरे पास टिप्पणी करने की प्रतिष्ठा नहीं है इसलिए मैं इसे यहां रखूंगा। विल का उदाहरण प्रस्तुत करना। मैंने LIKEs को "=" में बदल दिया और उन दोनों को WH इंगित किया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 फ़ाइल खोलें और पुराने पोस्ट प्रकार नाम के सभी उल्लेखों को नए नाम ("custom_post_type" मेटा के साथ-साथ पर्मलिंक फ़ील्ड में बदलें)
  3. अपने नए पोस्ट प्रकार को उसी नाम से संपादित करें जैसे .xml (लेकिन फिर भी पुराना एक ही रखें यदि यह विफल हो जाता है)
  4. Wordpress आयातक (टूल से सीधे उपलब्ध प्लगइन) के माध्यम से संपादित .xml फ़ाइल आयात करें
  5. जांचें कि सामग्री नए पोस्ट प्रकार में मौजूद है और फिर पुराने को हटा दें
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.