by Catch Plugins
1 (1 reviews)
Catch Themes Demo Import
Catch Themes Demo Import is a simple and easy-to-use demo importer WordPress plugin that allows you to import the theme demo data Based on One Click D …
Compatible with WP 6.8.3
v2.1.5
Current Version v2.1.5
Updated 7 months ago
Last Update on 13 May, 2025
Synced 12 hours ago
Last Synced on
Rank
#2,947
—
No change
Active Installs
6K+
—
No change
KW Avg Position
N/A
—
No change
Downloads
241.9K
—
Total downloads
Support Resolved
0%
—
No change
Rating
20%
Review 1 out of 5
1
(1 reviews)
Next Milestone 7K
6K+
7K+
59
Ranks to Climb
-
Growth Needed
6,763
Current Installs
Need 237 more installs to reach 7K+
Rank Changes
Current
#2,947
Change
Best
#
Active Installs Growth
Current
6,763+
Growth
Peak
6,763
Downloads Growth
Downloads
Growth
Peak
Reviews & Ratings
1.0
1 reviews
Overall
20%
5
0
(0%)
4
0
(0%)
3
0
(0%)
2
0
(0%)
1
1
(100%)
Tracked Keywords
Showing 0 of 0| Keyword | Position | Change | Type | Updated |
|---|---|---|---|---|
| No keyword data available yet. | ||||
Unlock Keyword Analytics
Track keyword rankings, search positions, and discover new ranking opportunities with a Pro subscription.
- Full keyword position tracking
- Historical ranking data
- Competitor keyword analysis
Track This Plugin
Get detailed analytics, keyword tracking, and position alerts delivered to your inbox.
Start Tracking FreePlugin Details
- Version
- 2.1.5
- Last Updated
- May 13, 2025
- Requires WP
- 5.9+
- Tested Up To
- 6.8.3
- PHP Version
- N/A
- Author
- Catch Plugins
Support & Rating
- Rating
- ★ ☆ ☆ ☆ ☆ 1
- Reviews
- 1
- Support Threads
- 0
- Resolved
- 0%
Keywords
Upgrade to Pro
Unlock keyword rankings, search positions, and detailed analytics with a Pro subscription.
Upgrade NowFrequently Asked Questions
Common questions about Catch Themes Demo Import
The log file will also be registered in the wp-admin -> Media section, so you can access it easily.
How to predefine demo imports?
This question is for theme authors. To predefine demo imports, you just have to add the following code structure, with your own values to your theme (using the cp-ctdi/import_files filter):
function ctdi_import_files() {
return array(
array(
'import_file_name' => 'Demo Import 1',
'categories' => array( 'Category 1', 'Category 2' ),
'import_file_url' => 'http://www.your_domain.com/ctdi/demo-content.xml',
'import_widget_file_url' => 'http://www.your_domain.com/ctdi/widgets.json',
'import_customizer_file_url' => 'http://www.your_domain.com/ctdi/customizer.dat',
'import_preview_image_url' => 'http://www.your_domain.com/ctdi/preview_import_image1.jpg',
'import_notice' => __( 'After you import this demo, you will have to setup the slider separately.', 'your-textdomain' ),
'preview_url' => 'http://www.your_domain.com/my-demo-1',
),
array(
'import_file_name' => 'Demo Import 2',
'categories' => array( 'New category', 'Old category' ),
'import_file_url' => 'http://www.your_domain.com/ctdi/demo-content2.xml',
'import_widget_file_url' => 'http://www.your_domain.com/ctdi/widgets2.json',
'import_customizer_file_url' => 'http://www.your_domain.com/ctdi/customizer2.dat',
'import_preview_image_url' => 'http://www.your_domain.com/ctdi/preview_import_image2.jpg',
'import_notice' => __( 'A special note for this import.', 'your-textdomain' ),
'preview_url' => 'http://www.your_domain.com/my-demo-2',
),
);
}
add_filter( 'cp-ctdi/import_files', 'ctdi_import_files' );
You can set content import, widgets, customizer and Redux framework import files. You can also define a preview image, which will be used only when multiple demo imports are defined, so that the user will see the difference between imports. Categories can be assigned to each demo import, so that they can be filtered easily. The preview URL will display the "Preview" button in the predefined demo item, which will open this URL in a new tab and user can view how the demo site looks like.
How to automatically assign "Front page", "Posts page" and menu locations after the importer is done?
You can do that, with the cp-ctdi/after_import action hook. The code would look something like this:
function ctdi_after_import_setup() {
// Assign menus to their locations.
$main_menu = get_term_by( 'name', 'Main Menu', 'nav_menu' );
set_theme_mod( 'nav_menu_locations', array(
'main-menu' => $main_menu->term_id,
)
);
// Assign front page and posts page (blog page).
$front_page_id = get_page_by_title( 'Home' );
$blog_page_id = get_page_by_title( 'Blog' );
update_option( 'show_on_front', 'page' );
update_option( 'page_on_front', $front_page_id->ID );
update_option( 'page_for_posts', $blog_page_id->ID );
}
add_action( 'cp-ctdi/after_import', 'ctdi_after_import_setup' );
What about using local import files (from theme folder)?
You have to use the same filter as in above example, but with a slightly different array keys: local_*. The values have to be absolute paths (not URLs) to your import files. To use local import files, that reside in your theme folder, please use the below code. Note: make sure your import files are readable!
function ctdi_import_files() {
return array(
array(
'import_file_name' => 'Demo Import 1',
'categories' => array( 'Category 1', 'Category 2' ),
'local_import_file' => trailingslashit( get_template_directory() ) . 'ctdi/demo-content.xml',
'local_import_widget_file' => trailingslashit( get_template_directory() ) . 'ctdi/widgets.json',
'local_import_customizer_file' => trailingslashit( get_template_directory() ) . 'ctdi/customizer.dat',
'import_preview_image_url' => 'http://www.your_domain.com/ctdi/preview_import_image1.jpg',
'import_notice' => __( 'After you import this demo, you will have to setup the slider separately.', 'your-textdomain' ),
'preview_url' => 'http://www.your_domain.com/my-demo-1',
),
array(
'import_file_name' => 'Demo Import 2',
'categories' => array( 'New category', 'Old category' ),
'local_import_file' => trailingslashit( get_template_directory() ) . 'ctdi/demo-content2.xml',
'local_import_widget_file' => trailingslashit( get_template_directory() ) . 'ctdi/widgets2.json',
'local_import_customizer_file' => trailingslashit( get_template_directory() ) . 'ctdi/customizer2.dat',
'import_preview_image_url' => 'http://www.your_domain.com/ctdi/preview_import_image2.jpg',
'import_notice' => __( 'A special note for this import.', 'your-textdomain' ),
'preview_url' => 'http://www.your_domain.com/my-demo-2',
),
);
}
add_filter( 'cp-ctdi/import_files', 'ctdi_import_files' );
How to handle different "after import setups" depending on which predefined import was selected?
This question might be asked by a theme author wanting to implement different after import setups for multiple predefined demo imports. Lets say we have predefined two demo imports with the following names: 'Demo Import 1' and 'Demo Import 2', the code for after import setup would be (using the cp-ctdi/after_import filter):
function ctdi_after_import( $selected_import ) {
echo "This will be displayed on all after imports!";
if ( 'Demo Import 1' === $selected_import['import_file_name'] ) {
echo "This will be displayed only on after import if user selects Demo Import 1";
// Set logo in customizer
set_theme_mod( 'logo_img', get_template_directory_uri() . '/assets/images/logo1.png' );
}
elseif ( 'Demo Import 2' === $selected_import['import_file_name'] ) {
echo "This will be displayed only on after import if user selects Demo Import 2";
// Set logo in customizer
set_theme_mod( 'logo_img', get_template_directory_uri() . '/assets/images/logo2.png' );
}
}
add_action( 'cp-ctdi/after_import', 'ctdi_after_import' );
Can I add some code before the widgets get imported?
Of course you can, use the cp-ctdi/before_widgets_import action. You can also target different predefined demo imports like in the example above. Here is a simple example code of the cp-ctdi/before_widgets_import action:
function ctdi_before_widgets_import( $selected_import ) {
echo "Add your code here that will be executed before the widgets get imported!";
}
add_action( 'cp-ctdi/before_widgets_import', 'ctdi_before_widgets_import' );
How to predefine demo imports?
This question is for theme authors. To predefine demo imports, you just have to add the following code structure, with your own values to your theme (using the cp-ctdi/import_files filter):
function ctdi_import_files() {
return array(
array(
'import_file_name' => 'Demo Import 1',
'categories' => array( 'Category 1', 'Category 2' ),
'import_file_url' => 'http://www.your_domain.com/ctdi/demo-content.xml',
'import_widget_file_url' => 'http://www.your_domain.com/ctdi/widgets.json',
'import_customizer_file_url' => 'http://www.your_domain.com/ctdi/customizer.dat',
'import_preview_image_url' => 'http://www.your_domain.com/ctdi/preview_import_image1.jpg',
'import_notice' => __( 'After you import this demo, you will have to setup the slider separately.', 'your-textdomain' ),
'preview_url' => 'http://www.your_domain.com/my-demo-1',
),
array(
'import_file_name' => 'Demo Import 2',
'categories' => array( 'New category', 'Old category' ),
'import_file_url' => 'http://www.your_domain.com/ctdi/demo-content2.xml',
'import_widget_file_url' => 'http://www.your_domain.com/ctdi/widgets2.json',
'import_customizer_file_url' => 'http://www.your_domain.com/ctdi/customizer2.dat',
'import_preview_image_url' => 'http://www.your_domain.com/ctdi/preview_import_image2.jpg',
'import_notice' => __( 'A special note for this import.', 'your-textdomain' ),
'preview_url' => 'http://www.your_domain.com/my-demo-2',
),
);
}
add_filter( 'cp-ctdi/import_files', 'ctdi_import_files' );
You can set content import, widgets, customizer and Redux framework import files. You can also define a preview image, which will be used only when multiple demo imports are defined, so that the user will see the difference between imports. Categories can be assigned to each demo import, so that they can be filtered easily. The preview URL will display the "Preview" button in the predefined demo item, which will open this URL in a new tab and user can view how the demo site looks like.
How to automatically assign "Front page", "Posts page" and menu locations after the importer is done?
You can do that, with the cp-ctdi/after_import action hook. The code would look something like this:
function ctdi_after_import_setup() {
// Assign menus to their locations.
$main_menu = get_term_by( 'name', 'Main Menu', 'nav_menu' );
set_theme_mod( 'nav_menu_locations', array(
'main-menu' => $main_menu->term_id,
)
);
// Assign front page and posts page (blog page).
$front_page_id = get_page_by_title( 'Home' );
$blog_page_id = get_page_by_title( 'Blog' );
update_option( 'show_on_front', 'page' );
update_option( 'page_on_front', $front_page_id->ID );
update_option( 'page_for_posts', $blog_page_id->ID );
}
add_action( 'cp-ctdi/after_import', 'ctdi_after_import_setup' );
What about using local import files (from theme folder)?
You have to use the same filter as in above example, but with a slightly different array keys: local_*. The values have to be absolute paths (not URLs) to your import files. To use local import files, that reside in your theme folder, please use the below code. Note: make sure your import files are readable!
function ctdi_import_files() {
return array(
array(
'import_file_name' => 'Demo Import 1',
'categories' => array( 'Category 1', 'Category 2' ),
'local_import_file' => trailingslashit( get_template_directory() ) . 'ctdi/demo-content.xml',
'local_import_widget_file' => trailingslashit( get_template_directory() ) . 'ctdi/widgets.json',
'local_import_customizer_file' => trailingslashit( get_template_directory() ) . 'ctdi/customizer.dat',
'import_preview_image_url' => 'http://www.your_domain.com/ctdi/preview_import_image1.jpg',
'import_notice' => __( 'After you import this demo, you will have to setup the slider separately.', 'your-textdomain' ),
'preview_url' => 'http://www.your_domain.com/my-demo-1',
),
array(
'import_file_name' => 'Demo Import 2',
'categories' => array( 'New category', 'Old category' ),
'local_import_file' => trailingslashit( get_template_directory() ) . 'ctdi/demo-content2.xml',
'local_import_widget_file' => trailingslashit( get_template_directory() ) . 'ctdi/widgets2.json',
'local_import_customizer_file' => trailingslashit( get_template_directory() ) . 'ctdi/customizer2.dat',
'import_preview_image_url' => 'http://www.your_domain.com/ctdi/preview_import_image2.jpg',
'import_notice' => __( 'A special note for this import.', 'your-textdomain' ),
'preview_url' => 'http://www.your_domain.com/my-demo-2',
),
);
}
add_filter( 'cp-ctdi/import_files', 'ctdi_import_files' );
How to handle different "after import setups" depending on which predefined import was selected?
This question might be asked by a theme author wanting to implement different after import setups for multiple predefined demo imports. Lets say we have predefined two demo imports with the following names: 'Demo Import 1' and 'Demo Import 2', the code for after import setup would be (using the cp-ctdi/after_import filter):
function ctdi_after_import( $selected_import ) {
echo "This will be displayed on all after imports!";
if ( 'Demo Import 1' === $selected_import['import_file_name'] ) {
echo "This will be displayed only on after import if user selects Demo Import 1";
// Set logo in customizer
set_theme_mod( 'logo_img', get_template_directory_uri() . '/assets/images/logo1.png' );
}
elseif ( 'Demo Import 2' === $selected_import['import_file_name'] ) {
echo "This will be displayed only on after import if user selects Demo Import 2";
// Set logo in customizer
set_theme_mod( 'logo_img', get_template_directory_uri() . '/assets/images/logo2.png' );
}
}
add_action( 'cp-ctdi/after_import', 'ctdi_after_import' );
Can I add some code before the widgets get imported?
Of course you can, use the cp-ctdi/before_widgets_import action. You can also target different predefined demo imports like in the example above. Here is a simple example code of the cp-ctdi/before_widgets_import action:
function ctdi_before_widgets_import( $selected_import ) {
echo "Add your code here that will be executed before the widgets get imported!";
}
add_action( 'cp-ctdi/before_widgets_import', 'ctdi_before_widgets_import' );
wp ctdi list - Which will list any predefined demo imports currently active theme might have,
wp ctdi import - which has a few options that you can use to import the things you want (content/widgets/customizer/predefined demos). Let's look at these options below.
wp ctdi import options:
wp ctdi import [--content=] [--widgets=] [--customizer=] [--predefined=]
--content=<file> - will run the content import with the WP import file specified in the <file> parameter,
--widgets=<file> - will run the widgets import with the widgets import file specified in the <file> parameter,
--customizer=<file> - will run the customizer settings import with the customizer import file specified in the <file> parameter,
--predefined=<index> - will run the theme predefined import with the index of the predefined import in the <index> parameter (you can use the wp ctdi list command to check which index is used for each predefined demo import)
The content, widgets and customizer options can be mixed and used at the same time. If the predefined option is set, then it will ignore all other options and import the predefined demo data.
I'm a theme author and I want to change the plugin intro text, how can I do that?
You can change the plugin intro text by using the cp-ctdi/plugin_intro_text filter:
function ctdi_plugin_intro_text( $default_text ) {
$default_text .= '<div class="ctdi__intro-text">This is a custom text added to this plugin intro text.</div>';
return $default_text;
}
add_filter( 'cp-ctdi/plugin_intro_text', 'ctdi_plugin_intro_text' );
To add some text in a separate "box", you should wrap your text in a div with a class of 'ctdi__intro-text', like in the code example above.
How to disable generation of smaller images (thumbnails) during the content import
This will greatly improve the time needed to import the content (images), but only the original sized images will be imported. You can disable it with a filter, so just add this code to your theme function.php file:
add_filter( 'cp-ctdi/regenerate_thumbnails_in_content_import', '__return_false' );
How to change the location, title and other parameters of the plugin page?
As a theme author you do not like the location of the "Import Demo Data" plugin page in Appearance -> Import Demo Data? You can change that with the filter below. Apart from the location, you can also change the title or the page/menu and some other parameters as well.
function ctdi_plugin_page_setup( $default_settings ) {
$default_settings['parent_slug'] = 'themes.php';
$default_settings['page_title'] = esc_html__( 'Catch Themes Demo Import' , 'catch-themes-demo-import' );
$default_settings['menu_title'] = esc_html__( 'Catch Themes Demo Import' , 'catch-themes-demo-import' );
$default_settings['capability'] = 'import';
$default_settings['menu_slug'] = 'catch-themes-demo-import';
return $default_settings;
}
add_filter( 'cp-ctdi/plugin_page_setup', 'ctdi_plugin_page_setup' );
How to do something before the content import executes?
In version 2.0.0 there is a new action hook: cp-ctdi/before_content_import, which will let you hook before the content import starts. An example of the code would look like this:
function ctdi_before_content_import( $selected_import ) {
if ( 'Demo Import 1' === $selected_import['import_file_name'] ) {
// Here you can do stuff for the "Demo Import 1" before the content import starts.
echo "before import 1";
}
else {
// Here you can do stuff for all other imports before the content import starts.
echo "before import 2";
}
}
add_action( 'cp-ctdi/before_content_import', 'ctdi_before_content_import' );
wp ctdi import - which has a few options that you can use to import the things you want (content/widgets/customizer/predefined demos). Let's look at these options below.
wp ctdi import options:
wp ctdi import [--content=] [--widgets=] [--customizer=] [--predefined=]
--content=<file> - will run the content import with the WP import file specified in the <file> parameter,
--widgets=<file> - will run the widgets import with the widgets import file specified in the <file> parameter,
--customizer=<file> - will run the customizer settings import with the customizer import file specified in the <file> parameter,
--predefined=<index> - will run the theme predefined import with the index of the predefined import in the <index> parameter (you can use the wp ctdi list command to check which index is used for each predefined demo import)
The content, widgets and customizer options can be mixed and used at the same time. If the predefined option is set, then it will ignore all other options and import the predefined demo data.
I'm a theme author and I want to change the plugin intro text, how can I do that?
You can change the plugin intro text by using the cp-ctdi/plugin_intro_text filter:
function ctdi_plugin_intro_text( $default_text ) {
$default_text .= '<div class="ctdi__intro-text">This is a custom text added to this plugin intro text.</div>';
return $default_text;
}
add_filter( 'cp-ctdi/plugin_intro_text', 'ctdi_plugin_intro_text' );
To add some text in a separate "box", you should wrap your text in a div with a class of 'ctdi__intro-text', like in the code example above.
How to disable generation of smaller images (thumbnails) during the content import
This will greatly improve the time needed to import the content (images), but only the original sized images will be imported. You can disable it with a filter, so just add this code to your theme function.php file:
add_filter( 'cp-ctdi/regenerate_thumbnails_in_content_import', '__return_false' );
How to change the location, title and other parameters of the plugin page?
As a theme author you do not like the location of the "Import Demo Data" plugin page in Appearance -> Import Demo Data? You can change that with the filter below. Apart from the location, you can also change the title or the page/menu and some other parameters as well.
function ctdi_plugin_page_setup( $default_settings ) {
$default_settings['parent_slug'] = 'themes.php';
$default_settings['page_title'] = esc_html__( 'Catch Themes Demo Import' , 'catch-themes-demo-import' );
$default_settings['menu_title'] = esc_html__( 'Catch Themes Demo Import' , 'catch-themes-demo-import' );
$default_settings['capability'] = 'import';
$default_settings['menu_slug'] = 'catch-themes-demo-import';
return $default_settings;
}
add_filter( 'cp-ctdi/plugin_page_setup', 'ctdi_plugin_page_setup' );
How to do something before the content import executes?
In version 2.0.0 there is a new action hook: cp-ctdi/before_content_import, which will let you hook before the content import starts. An example of the code would look like this:
function ctdi_before_content_import( $selected_import ) {
if ( 'Demo Import 1' === $selected_import['import_file_name'] ) {
// Here you can do stuff for the "Demo Import 1" before the content import starts.
echo "before import 1";
}
else {
// Here you can do stuff for all other imports before the content import starts.
echo "before import 2";
}
}
add_action( 'cp-ctdi/before_content_import', 'ctdi_before_content_import' );
add_action( 'cp-ctdi/enable_wp_customize_save_hooks', '__return_true' );
This will enable the following WP hooks when importing the customizer data: customize_save, customize_save_*, customize_save_after.
How to configure the multi grid layout import popup confirmation?
If you want to disable the popup confirmation modal window, use this filter:
add_filter( 'cp-ctdi/enable_grid_layout_import_popup_confirmation', '__return_false' );
If you want to just change some options for the jQuery modal window we use for the popup confirmation, then use this filter:
function my_theme_ctdi_confirmation_dialog_options ( $options ) {
return array_merge( $options, array(
'width' => 300,
'dialogClass' => 'wp-dialog',
'resizable' => false,
'height' => 'auto',
'modal' => true,
) );
}
add_filter( 'cp-ctdi/confirmation_dialog_options', 'my_theme_ctdi_confirmation_dialog_options', 10, 1 );
This will enable the following WP hooks when importing the customizer data: customize_save, customize_save_*, customize_save_after.
How to configure the multi grid layout import popup confirmation?
If you want to disable the popup confirmation modal window, use this filter:
add_filter( 'cp-ctdi/enable_grid_layout_import_popup_confirmation', '__return_false' );
If you want to just change some options for the jQuery modal window we use for the popup confirmation, then use this filter:
function my_theme_ctdi_confirmation_dialog_options ( $options ) {
return array_merge( $options, array(
'width' => 300,
'dialogClass' => 'wp-dialog',
'resizable' => false,
'height' => 'auto',
'modal' => true,
) );
}
add_filter( 'cp-ctdi/confirmation_dialog_options', 'my_theme_ctdi_confirmation_dialog_options', 10, 1 );