elementor import_templates编码不导入模板

elementor import_templates coding not importing template

提问人:Parash Shrestha 提问时间:10/11/2023 最后编辑:Parash Shrestha 更新时间:10/16/2023 访问量:50

问:

有人可以帮助我完成此代码吗?因为我正在从主题目录导入 JSON 模板文件,并通过传递可用的模板 ID 将导入的 JSON 文件设置为首页。我在 WordPress 仪表板上有一个admin_menu按钮,点击它时会触发下面粘贴的功能。非常感谢您的帮助。

我用过的代码

if (class_exists('Elementor\Plugin')) {
    $template_file_path = get_stylesheet_directory().'/assets/exampleTemplate.json';

    $template_content = file_get_contents($template_file_path);
    $template_data = json_decode($template_content, true);

    if (is_array($template_data)) {
        if ($template_data !== null) {
            $template_manager = \Elementor\Plugin::$instance->templates_manager;
            $imported_template = $template_manager->import_template($template_data);

            if (!is_wp_error($imported_template)) {
                $imported_template_id = $imported_template['template_id'];

                // Set the imported template as the front page
                update_option('page_on_front', $imported_template_id);
                update_option('show_on_front', 'page');

                wp_send_json_success('Template imported successfully and set as the front page.');
            } else {
                $error_message = $imported_template->get_error_message();
                wp_send_json_error('Error importing template: ' . $error_message);
            }
        } else {
            wp_send_json_error('Error decoding JSON file.');
        }
    } else {
        wp_send_json_error('JSON file not found.');
    }
} else {
    wp_send_json_error('Elementor is not active.');
}
数组 json wordpress 模板 elementor

评论

0赞 Community 10/11/2023
请澄清您的具体问题或提供其他详细信息,以准确说明您的需求。正如目前所写的那样,很难确切地说出你在问什么。
0赞 Parash Shrestha 10/11/2023
我的问题是:代码不起作用
0赞 suchislife 10/15/2023
接下来要研究的关键词是:早期如果返回。整个概念基于编写代码以在继续操作之前检查是否存在某些内容:此模式将导致错误处理自然发生,因此您开始编写更易于故障排除的代码。if(!a) { return false; } else { return true; }

答:

0赞 suchislife 10/15/2023 #1

首先,我将确保我有正确的文件路径、JSON 结构和 Elementor 活动。此外,请根据您的设置考虑用于父主题或子主题。get_template_directory()get_stylesheet_directory()

此示例添加了更具体的错误检查,以便在出现问题时更轻松地进行故障排除

它确保模板文件存在,检查 JSON 错误,并在继续操作之前验证 Elementor 是否处于活动状态。

if (class_exists('Elementor\Plugin')) {
    $template_file_path = get_template_directory() . '/assets/exampleTemplate.json'; // For parent theme

    if (file_exists($template_file_path)) {
        $template_content = file_get_contents($template_file_path);
        $template_data = json_decode($template_content, true);

        if (json_last_error() === JSON_ERROR_NONE && is_array($template_data)) {
            $template_manager = \Elementor\Plugin::$instance->templates_manager;
            $imported_template = $template_manager->import_template($template_data);

            if (!is_wp_error($imported_template)) {
                $imported_template_id = $imported_template['template_id'];
                update_option('page_on_front', $imported_template_id);
                update_option('show_on_front', 'page');
                wp_send_json_success('Template imported successfully and set as the front page.');
            } else {
                wp_send_json_error('Error importing template: ' . $imported_template->get_error_message());
            }
        } else {
            wp_send_json_error('Invalid JSON file.');
        }
    } else {
        wp_send_json_error('Template file not found.');
    }
} else {
    wp_send_json_error('Elementor is not active.');
}

示例 2

使用三元和 null 合并运算符重构代码以减少语句。if

可读性较差,但很酷,如果你的代码不会有太大变化的话。

始终考虑可读性和最小化条件语句之间的权衡。

$classExists = class_exists('Elementor\Plugin');
$template_file_path = $classExists ? get_template_directory() . '/assets/exampleTemplate.json' : null;
$template_content = $template_file_path && file_exists($template_file_path) ? file_get_contents($template_file_path) : null;
$template_data = $template_content ? json_decode($template_content, true) : null;
$jsonValid = ($template_data && json_last_error() === JSON_ERROR_NONE && is_array($template_data));
$template_manager = $jsonValid ? \Elementor\Plugin::$instance->templates_manager : null;
$imported_template = $template_manager ? $template_manager->import_template($template_data) : null;

$response = !$classExists ? 'Elementor is not active.' :
            (!$template_file_path ? 'Template file not found.' :
            (!$jsonValid ? 'Invalid JSON file.' :
            (is_wp_error($imported_template) ? 'Error importing template: ' . $imported_template->get_error_message() : 
            (update_option('page_on_front', $imported_template['template_id']) && update_option('show_on_front', 'page')) && 
            wp_send_json_success('Template imported successfully and set as the front page.'))));

if (is_wp_error($response)) {
    wp_send_json_error($response);
} else {
    wp_send_json_success($response);
}

评论

0赞 Parash Shrestha 10/16/2023
感谢您的回复,我会考虑这一点。