Stap-voor-stap: Plugin maken
Ik had veel templates bewaard in Elementor. Maar deze 1 voor 1 plaatsen op aparte pagina’s leek me veel werk. Samen met Chat plugin geschreven om alle Elementor Templates om te zetten naar pagina’s.
1. Maak een nieuw pluginbestand aan
Bestandsnaam (voorbeeld):elementor-templates-to-pages.php
2. Maak een mapje voor de plugin
Bijvoorbeeld:
📁 elementor-templates-to-pages
Zet daarin het bestand elementor-templates-to-pages.php.
3. Upload de plugin naar je WordPress site
Ga naar
/wp-content/plugins/via FTP of bestandsbeheer.Upload de hele map
elementor-templates-to-pages.
4. Activeer de plugin
Log in op je WordPress dashboard.
Ga naar Plugins > Geïnstalleerde plugins.
Activeer “Elementor Templates naar Pagina’s Converter”.
5. Voer de conversie uit
Ga naar Gereedschap > Convert Elementor Templates
Klik op “Templates converteren”
Je ziet een melding hoeveel pagina’s er zijn aangemaakt
✅ Resultaat: Alle Elementor templates worden als pagina aangemaakt, zonder dubbele titels.
<?php
/*
Plugin Name: Elementor Templates naar Pagina’s Converter
Description: Converteert Elementor templates automatisch naar WordPress pagina’s met dezelfde naam.
Version: 1.0
Author: Jouw Naam
*/
add_action(‘admin_menu’, ‘etp_add_admin_menu’);
function etp_add_admin_menu() {
add_management_page(
‘Converteer Elementor Templates’,
‘Convert Elementor Templates’,
‘manage_options’,
‘etp-converter’,
‘etp_converter_page’
);
}
function etp_converter_page() {
if (!current_user_can(‘manage_options’)) {
return;
}
if (isset($_POST[‘etp_convert’])) {
$converted = etp_convert_templates_to_pages();
echo ‘<div class=”updated”><p><strong>’ . count($converted) . ‘ templates geconverteerd naar pagina’s.</strong></p></div>’;
}
?>
<div class=”wrap”>
<h1>Elementor Templates Converteren</h1>
<form method=”post”>
<p>Met deze knop converteer je al je opgeslagen Elementor templates naar gewone pagina’s.</p>
<?php submit_button(‘Templates converteren’, ‘primary’, ‘etp_convert’); ?>
</form>
</div>
<?php
}
function etp_convert_templates_to_pages() {
$converted = [];
$templates = get_posts(array(
‘post_type’ => ‘elementor_library’,
‘post_status’ => ‘publish’,
‘numberposts’ => -1,
));
foreach ($templates as $template) {
if (get_page_by_title($template->post_title, OBJECT, ‘page’)) {
continue; // Sla over als pagina al bestaat
}
$new_page_id = wp_insert_post(array(
‘post_title’ => $template->post_title,
‘post_content’ => $template->post_content,
‘post_status’ => ‘publish’,
‘post_type’ => ‘page’,
));
if ($new_page_id && !is_wp_error($new_page_id)) {
update_post_meta($new_page_id, ‘_elementor_edit_mode’, ‘builder’);
update_post_meta($new_page_id, ‘_elementor_template_type’, ‘wp-page’);
update_post_meta($new_page_id, ‘_elementor_data’, get_post_meta($template->ID, ‘_elementor_data’, true));
$converted[] = $template->post_title;
}
}
return $converted;
}
Images uit Elementor worden niet meegenomen !
Omdat je alle afbeeldingen uit je mediabibliotheek gebruikt, betekent dat:
De afbeeldings-URL’s in de Elementor JSON zijn intern (bijvoorbeeld:
https://jouwdomein.nl/wp-content/uploads/…)We hoeven dus alleen maar:
De URLs te herkennen in de Elementor JSON
De bijbehorende afbeelding via
media_sideload_image()te importeren op de nieuwe siteDe URL’s in de Elementor JSON te vervangen door de nieuwe URL
De aangepaste Elementor data op te slaan bij de pagina
Uitgebreide Plugin: Template → Pagina + Afbeelding Import
✅ Wat doet deze plugin nu?
Zet alle Elementor templates om naar pagina’s
Scant het
_elementor_dataJSON-veldDownloadt alle afbeeldingen die erin voorkomen
Voegt ze toe aan de mediabibliotheek
Vervangt de URL’s in de pagina met de nieuwe lokale URL’s
Alles dus netjes en compleet — klaar voor gebruik op andere websites!
📦 Installatie (zoals eerder)
Maak een map in
wp-content/plugins/genaamd:elementor-templates-to-pages-imagesPlak dit bestand erin als:
elementor-templates-to-pages-images.phpActiveer via WP Admin > Plugins
Ga naar Gereedschap > Convert Elementor Templates
Klik op “Templates converteren”



<?php
/*
Plugin Name: Elementor Templates naar Pagina’s + Afbeeldingen
Description: Converteert Elementor templates naar pagina’s inclusief afbeeldingen vanuit de mediabibliotheek.
Version: 1.1
Author: Jouw Naam
*/
add_action(‘admin_menu’, ‘etpi_add_admin_menu’);
function etpi_add_admin_menu() {
add_management_page(
‘Convert Elementor Templates + Images’,
‘Convert Templates + Images’,
‘manage_options’,
‘etpi-converter’,
‘etpi_converter_page’
);
}
function etpi_converter_page() {
if (!current_user_can(‘manage_options’)) {
return;
}
if (isset($_POST[‘etpi_convert’])) {
$converted = etpi_convert_templates_to_pages();
echo ‘<div class=”updated”><p><strong>’ . count($converted) . ‘ templates geconverteerd naar pagina’s inclusief afbeeldingen.</strong></p></div>’;
}
?>
<div class=”wrap”>
<h1>Elementor Templates Converteren (met afbeeldingen)</h1>
<form method=”post”>
<p>Deze tool converteert al je Elementor templates naar pagina’s, en importeert de gebruikte afbeeldingen automatisch in de mediabibliotheek.</p>
<?php submit_button(‘Templates converteren met afbeeldingen’, ‘primary’, ‘etpi_convert’); ?>
</form>
</div>
<?php
}
function etpi_convert_templates_to_pages() {
$converted = [];
$templates = get_posts(array(
‘post_type’ => ‘elementor_library’,
‘post_status’ => ‘publish’,
‘numberposts’ => -1,
));
foreach ($templates as $template) {
if (get_page_by_title($template->post_title, OBJECT, ‘page’)) {
continue;
}
$elementor_data = get_post_meta($template->ID, ‘_elementor_data’, true);
$data = json_decode($elementor_data, true);
if (!$data) continue;
$updated_data = etpi_import_images_and_replace_urls($data);
$new_page_id = wp_insert_post(array(
‘post_title’ => $template->post_title,
‘post_content’ => ”,
‘post_status’ => ‘publish’,
‘post_type’ => ‘page’,
));
if ($new_page_id && !is_wp_error($new_page_id)) {
update_post_meta($new_page_id, ‘_elementor_edit_mode’, ‘builder’);
update_post_meta($new_page_id, ‘_elementor_template_type’, ‘wp-page’);
update_post_meta($new_page_id, ‘_elementor_data’, wp_slash(json_encode($updated_data)));
$converted[] = $template->post_title;
}
}
return $converted;
}
function etpi_import_images_and_replace_urls($data) {
$uploads_dir = wp_upload_dir();
$site_url = site_url();
array_walk_recursive($data, function (&$value, $key) use ($uploads_dir, $site_url) {
if ($key === ‘url’ && is_string($value) && strpos($value, ‘/wp-content/uploads/’) !== false) {
if (strpos($value, $site_url) !== false || strpos($value, ‘/’) === 0) {
$media_id = etpi_sideload_image($value);
if ($media_id && !is_wp_error($media_id)) {
$new_url = wp_get_attachment_url($media_id);
if ($new_url) {
$value = $new_url;
}
}
}
}
});
return $data;
}
function etpi_sideload_image($url) {
if (strpos($url, ‘http’) !== 0) {
$url = site_url($url);
}
require_once ABSPATH . ‘wp-admin/includes/media.php’;
require_once ABSPATH . ‘wp-admin/includes/file.php’;
require_once ABSPATH . ‘wp-admin/includes/image.php’;
$tmp = download_url($url);
if (is_wp_error($tmp)) {
return false;
}
$file_array = array(
‘name’ => basename($url),
’tmp_name’ => $tmp
);
$media_id = media_handle_sideload($file_array, 0);
if (is_wp_error($media_id)) {
@unlink($tmp);
return false;
}
return $media_id;
}
Images uit Elementor worden WEER niet meegenomen !
Oplossing; exporteer alle media apart en importeer in je nieuwe site. Nu verschijnen de images wel in de paginas want urls kloppen al.
✅ Wat werkt nu:
Je converteert je Elementor-templates naar pagina’s, inclusief verwijzingen naar afbeeldingen.
Je exporteert en importeert die pagina’s op een andere site.
Als je daarna apart de gebruikte afbeeldingen importeert (bijv. via ZIP of FTP), dan:
✅ verschijnen ze correct op de pagina’s
✅ staan ze ook netjes in de mediabibliotheek (mits goed geïmporteerd)
✅ Elementor verwijst automatisch naar de juiste (herkende) bestanden
🧠 Waarom dit werkt
Zodra je de afbeeldingen fysiek op de nieuwe site hebt staan én WordPress ze herkent (via media-ID’s of via exacte URL), dan:
Elementor laat ze correct zien (Elementor gebruikt voornamelijk URL’s)
WordPress toont ze ook in de mediabibliotheek (bij herimport of via plugins als “Media from FTP”)
🧭 Jouw setup is nu:
✔️ Eén plugin om templates naar pagina’s om te zetten
✔️ Afbeeldingen apart verplaatsen
✔️ Geen extra plugins of complexe migratietools nodig



