You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

导入Elementor WordPress页面时触发致命TypeError的技术问询

自定义WordPress主题中Elementor页面导入错误的解决方案

问题场景

开发自定义WordPress主题时,使用Elementor免费版导出页面数据成功,但导入时触发致命错误:

Fatal error: Uncaught TypeError: Elementor\Core\Page_Assets\Loader::enable_assets(): Argument #1 ($assets_data) must be of type array

导出代码(可正常运行)

$pages = get_posts( array('post_type' => 'page', 'numberposts' => -1) );
$exported_data['pages'] = array();
foreach ($pages as $page) {
    $page_data = array(
        'ID' => $page->ID,
        'post_title' => $page->post_title,
        'post_content' => $page->post_content,
        'meta' => get_post_meta($page->ID),
        'is_elementor' => (get_post_meta($page->ID, '_elementor_edit_mode', true) === 'builder'),
        '_elementor_data' => get_post_meta($page->ID, '_elementor_data', true)
    );
    $exported_data['pages'][] = $page_data;
}

原导入代码(触发错误)

$exported_pages = $imported_data['pages'];
$page_id_mapping = array();
if (isset($exported_pages)) {
    foreach ($exported_pages as $page_data) {
        // ... 创建页面并设置元数据的代码 ...
        // 处理Elementor数据
        if ($page_data['is_elementor']) {
            $elementor_data = array();
            if (isset($page_data['_elementor_data'])) {
                $decoded_data = json_decode($page_data['_elementor_data'], true);
                $elementor_data = $decoded_data[0]; // 这里是问题所在
            }
            update_post_meta($page_id, '_elementor_data', $elementor_data);
            update_post_meta($page_id, '_elementor_edit_mode', 'builder');
        }
    }
}

已验证的Elementor数据结构

解码后的_elementor_data是有效关联数组:

array (size=5)
  'id' => string 'd9e7f92' (length=7)
  'elType' => string 'section' (length=7)
  'settings' => 
    array (size=10)
      'layout' => string 'full_width' (length=10)
      'height' => string 'full' (length=4)
      'content_position' => string 'middle' (length=6)
      'overflow' => string 'hidden' (length=6)
      'background_background' => string 'classic' (length=7)
      'background_image' => 
        array (size=5)
          ...
      'background_position' => string 'center center' (length=13)
      'background_repeat' => string 'no-repeat' (length=9)
      'background_size' => string 'cover' (length=5)
      'css_classes' => string 'hero' (length=4)
  'elements' => 
    array (size=1)
      0 => 
        array (size=5)
          ...
  'isInner' => boolean false

解决方案

1. 修复Elementor数据存储格式

Elementor要求_elementor_data字段存储完整的JSON数组(即使只有一个section),原代码中取$decoded_data[0]只保留了单个section对象,导致Elementor解析时无法识别为数组,触发类型错误。

修改导入代码中Elementor数据处理部分:

if ($page_data['is_elementor']) {
    $elementor_data = array();
    if (isset($page_data['_elementor_data'])) {
        // 直接保留解码后的完整数组,不要取索引0的元素
        $elementor_data = json_decode($page_data['_elementor_data'], true);
        // 确保是数组格式,防止意外情况
        if (!is_array($elementor_data)) {
            $elementor_data = array();
        }
    }
    update_post_meta($page_id, '_elementor_data', $elementor_data);
    update_post_meta($page_id, '_elementor_edit_mode', 'builder');
}

2. 导入后刷新Elementor缓存

导入完成后调用Elementor的文档保存方法,确保数据被正确初始化:

// 在页面创建完成后添加
if (class_exists('Elementor\Plugin')) {
    $elementor_doc = Elementor\Plugin::$instance->documents->get($page_id);
    if ($elementor_doc) {
        $elementor_doc->save();
    }
}

3. 优化导出逻辑,只保留必要的Elementor元数据

全量导出get_post_meta可能包含冗余或冲突数据,建议明确指定需要导出的Elementor相关元键:

// 修改导出代码中的page_data部分
$page_data = array(
    'ID' => $page->ID,
    'post_title' => $page->post_title,
    'post_content' => $page->post_content,
    'is_elementor' => (get_post_meta($page->ID, '_elementor_edit_mode', true) === 'builder'),
    // 只导出Elementor必要元数据
    'elementor_meta' => array(
        '_elementor_data' => get_post_meta($page->ID, '_elementor_data', true),
        '_elementor_edit_mode' => get_post_meta($page->ID, '_elementor_edit_mode', true),
        '_elementor_version' => get_post_meta($page->ID, '_elementor_version', true),
        '_elementor_template_type' => get_post_meta($page->ID, '_elementor_template_type', true),
    )
);

导入时对应处理elementor_meta中的字段即可。

内容的提问来源于stack exchange,提问作者ItServices

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 04:42:46