Export and Map Taxonomies

User
Export custom post type taxonomies and map it to other cpt taxonomy
Assistant
To export taxonomies from one Custom Post Type (CPT) and map them to another CPT's taxonomy in WordPress, you can follow these steps. This will involve exporting the taxonomy terms, then reassigning or remapping them to another CPT's taxonomy using PHP.

Here's a complete guide:

### Step 1: Export Taxonomy Terms from Source CPT

First, let's get the terms from your source CPT's taxonomy. You can use the following PHP code snippet:

function export_taxonomy_terms($source_taxonomy) {
    // Get all terms from the source taxonomy
    $terms = get_terms([
        'taxonomy' => $source_taxonomy,
        'hide_empty' => false,
    ]);

    // Check if terms were found
    if (is_wp_error($terms) || empty($terms)) {
        return [];
    }

    // Prepare an array of terms
    $exported_terms = [];
    foreach ($terms as $term) {
        $exported_terms[] = [
            'name' => $term->name,
            'slug' => $term->slug,
            'description' => $term->description,
            'parent' => $term->parent,
        ];
    }

    return $exported_terms;
}

// Usage
$source_taxonomy = 'old_cpt_taxonomy'; // Replace with your source taxonomy slug
$exported_terms = export_taxonomy_terms($source_taxonomy);

### Step 2: Map and Import Taxonomy Terms to Target CPT

Now that you have the terms exported, you can map and import them to the target CPT's taxonomy. The following function will handle the mapping:

function import_taxonomy_terms($terms, $target_taxonomy) {
    if (empty($terms) || !taxonomy_exists($target_taxonomy)) {
        return;
    }

    foreach ($terms as $term) {
        // Check if the term already exists in the target taxonomy
        $existing_term = term_exists($term['slug'], $target_taxonomy);

        if (!$existing_term) {
            // Create a new term in the target taxonomy
            wp_insert_term(
                $term['name'],
                $target_taxonomy,
                [
                    'slug' => $term['slug'],
                    'description' => $term['description'],
                    'parent' => $term['parent'],
                ]
            );
        }
    }
}

// Usage
$target_taxonomy = 'new_cpt_taxonomy'; // Replace with your target taxonomy slug
import_taxonomy_terms($exported_terms, $target_taxonomy);

### Explanation:

1. **`export_taxonomy_terms()` Function**:
– Retrieves all terms from the specified source taxonomy.
– Returns an array of terms, including their names, slugs, descriptions, and parent IDs.

2. **`import_taxonomy_terms()` Function**:
– Takes the exported terms and imports them into the target taxonomy.
– Checks if a term with the same slug already exists before creating a new one to avoid duplicates.

### Step 3: Execute the Code

You can add the above code to your theme's `functions.php` file or create a custom plugin to run it once. Remember to replace `'old_cpt_taxonomy'` and `'new_cpt_taxonomy'` with your actual taxonomy slugs.

### Step 4: (Optional) Assign Terms to Posts

If you want to assign the new terms to posts in the target CPT, you can use this additional snippet:

function assign_terms_to_posts($old_taxonomy, $new_taxonomy, $post_type) {
    $posts = get_posts([
        'post_type' => $post_type,
        'posts_per_page' => -1,
    ]);

    foreach ($posts as $post) {
        $terms = wp_get_post_terms($post->ID, $old_taxonomy);

        if (!empty($terms) && !is_wp_error($terms)) {
            $term_slugs = wp_list_pluck($terms, 'slug');
            wp_set_post_terms($post->ID, $term_slugs, $new_taxonomy);
        }
    }
}

// Usage
assign_terms_to_posts('old_cpt_taxonomy', 'new_cpt_taxonomy', 'your_target_cpt');

### Final Notes:
– Backup your database before running any script.
– Adjust the code according to your specific CPT names and taxonomies.
– Run the script only once to avoid duplicates.

This approach will allow you to export taxonomy terms from one CPT and map them to another while preserving the term relationships and hierarchies.

User
other cpt at other server
Assistant
If you're looking to export taxonomies from a Custom Post Type (CPT) on one server and import them to a different CPT on another server, you'll need to go through a process that involves **exporting data from the source server**, **transferring the data**, and then **importing it on the target server**.

Here's a step-by-step guide to achieve this:

### Step 1: Export Taxonomy Terms from Source Server

First, you need to export the taxonomy terms from your source server. For this, you can create a custom PHP script or use the WordPress export tool.

#### Method 1: Using a Custom PHP Script

Create a PHP file (e.g., `export-taxonomies.php`) in your theme folder or run it temporarily:

<?php
// Load WordPress functions (if needed)
require_once('wp-load.php');

function export_taxonomy_terms($source_taxonomy) {
    // Get all terms from the source taxonomy
    $terms = get_terms([
        'taxonomy' => $source_taxonomy,
        'hide_empty' => false,
    ]);

    // Check if terms were found
    if (is_wp_error($terms) || empty($terms)) {
        return [];
    }

    // Prepare an array of terms
    $exported_terms = [];
    foreach ($terms as $term) {
        $exported_terms[] = [
            'name' => $term->name,
            'slug' => $term->slug,
            'description' => $term->description,
            'parent' => $term->parent,
        ];
    }

    // Output the data as JSON
    header('Content-Type: application/json');
    echo json_encode($exported_terms);
}

// Usage
$source_taxonomy = 'old_cpt_taxonomy'; // Replace with your source taxonomy slug
export_taxonomy_terms($source_taxonomy);
?>

– Save this file on your source server.
– Access the script via your browser: `https://your-source-site.com/export-taxonomies.php`.
– The browser will display the JSON output, which you can save as `taxonomy-export.json`.

#### Method 2: Using the WordPress Export Tool

Alternatively, you can use the built-in **WordPress Export Tool**:
– Go to **Tools** > **Export** in your WordPress admin dashboard.
– Select "Taxonomies" and choose the relevant CPT.
– Click **Download Export File**. This will give you an XML file.

### Step 2: Transfer the Exported File to the Target Server

– If you used Method 1, transfer the `taxonomy-export.json` file to your target server using FTP, SCP, or any other method.
– If you used Method 2, you can upload the XML file directly using the WordPress Import Tool.

### Step 3: Import Taxonomy Terms on Target Server

For the `taxonomy-export.json` method, use the following PHP script on your target server:

#### Method 1: Custom PHP Script for JSON Import

Create a PHP file (e.g., `import-taxonomies.php`) in your theme folder:

<?php
// Load WordPress functions (if needed)
require_once('wp-load.php');

function import_taxonomy_terms($file_path, $target_taxonomy) {
    // Read the JSON file
    $json_data = file_get_contents($file_path);
    $terms = json_decode($json_data, true);

    if (empty($terms)) {
        echo 'No terms found to import.';
        return;
    }

    foreach ($terms as $term) {
        // Check if the term already exists in the target taxonomy
        $existing_term = term_exists($term['slug'], $target_taxonomy);

        if (!$existing_term) {
            // Create a new term in the target taxonomy
            wp_insert_term(
                $term['name'],
                $target_taxonomy,
                [
                    'slug' => $term['slug'],
                    'description' => $term['description'],
                    'parent' => $term['parent'],
                ]
            );
        }
    }

    echo 'Terms imported successfully.';
}

// Usage
$file_path = 'path/to/taxonomy-export.json'; // Update with your JSON file path
$target_taxonomy = 'new_cpt_taxonomy'; // Replace with your target taxonomy slug
import_taxonomy_terms($file_path, $target_taxonomy);
?>

– Save this file on your target server.
– Access the script via your browser: `https://your-target-site.com/import-taxonomies.php`.

#### Method 2: Using WordPress Import Tool (For XML)

If you exported the taxonomies as an XML file:
– Go to **Tools** > **Import** in your target WordPress admin dashboard.
– Install the **WordPress Importer** if not already installed.
– Upload the XML file you exported earlier.
– Follow the prompts to import the terms.

### Step 4: (Optional) Assign Imported Terms to Posts

If you want to assign the imported terms to posts of the new CPT, use this PHP script:

function assign_imported_terms_to_posts($old_taxonomy, $new_taxonomy, $post_type) {
    $posts = get_posts([
        'post_type' => $post_type,
        'posts_per_page' => -1,
    ]);

    foreach ($posts as $post) {
        $terms = wp_get_post_terms($post->ID, $old_taxonomy);

        if (!empty($terms) && !is_wp_error($terms)) {
            $term_slugs = wp_list_pluck($terms, 'slug');
            wp_set_post_terms($post->ID, $term_slugs, $new_taxonomy);
        }
    }
}

// Usage
assign_imported_terms_to_posts('old_taxonomy_slug', 'new_taxonomy_slug', 'your_target_cpt');

### Final Notes:
– Always **backup your database** on both servers before performing these operations.
– Ensure that your JSON or XML files are correctly formatted.
– Adjust file paths and taxonomy slugs as needed.
– Run each script only once to avoid duplicates.

Leave a Comment

Your email address will not be published. Required fields are marked *