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

如何在WordPress编辑器中添加Bootstrap网格选择或下拉菜单

针对你的WordPress Bootstrap布局需求的解决方案

一、这类需求很常见,不少开发者都做过

核心就是做轻量的自定义布局字段,避开Divi那种复杂builder的学习曲线,让编辑人员直接选行列、填内容就行,完全不用碰Divi的复杂设置。

二、必须做自定义插件,原因如下

  • 安全可控:自己写的代码,没有第三方插件的冗余功能和潜在漏洞,完全符合你的安全要求。
  • 批量部署方便:你们有30+网站,插件可以直接打包在所有站点安装,比改主题效率高太多,而且主题更新不会影响这个功能。
  • 维护简单:后续要调整布局样式、加新的列选项,只需要更新插件代码就行,不用挨个改主题文件。

三、具体实现步骤(原生WP+Bootstrap)

1. 后台加自定义元框

用WP原生函数创建后台字段,给编辑人员提供列数选择、每列的内容编辑器,不用依赖第三方工具,代码完全自己掌控:

// 注册布局元框
add_action('add_meta_boxes', 'bs_layout_meta_box');
function bs_layout_meta_box() {
    add_meta_box('bs-layout', 'Bootstrap 简易布局', 'bs_layout_meta_box_html', ['post', 'page'], 'normal', 'high');
}

// 元框内容渲染
function bs_layout_meta_box_html($post) {
    wp_nonce_field('bs_layout_save_nonce', 'bs_layout_nonce');
    $col_count = get_post_meta($post->ID, '_bs_col_count', true) ?: '2';
    ?>
    <div style="margin-bottom:15px;">
        <label for="bs-col-count">选择列数:</label>
        <select id="bs-col-count" name="bs_col_count">
            <option value="1" <? selected($col_count, '1') ?>>1列</option>
            <option value="2" <? selected($col_count, '2') ?>>2列</option>
            <option value="3" <? selected($col_count, '3') ?>>3列</option>
            <option value="4" <? selected($col_count, '4') ?>>4列</option>
        </select>
    </div>
    <?php
    // 根据选择的列数生成对应编辑器
    for ($i=1; $i<=$col_count; $i++) {
        $col_content = get_post_meta($post->ID, "_bs_col_{$i}_content", true);
        echo "<h4 style=\"margin:15px 0 5px;\">第{$i}列内容</h4>";
        wp_editor($col_content, "bs_col_{$i}_content", [
            'textarea_rows' => 6,
            'quicktags' => true,
            'tinymce' => [
                'toolbar1' => 'bold,italic,link,unlink,undo,redo', // 精简编辑器按钮,降低复杂度
                'toolbar2' => ''
            ]
        ]);
    }
}

// 保存元框数据
add_action('save_post', 'bs_layout_save_meta_data');
function bs_layout_save_meta_data($post_id) {
    // 验证权限和nonce
    if (!isset($_POST['bs_layout_nonce']) || !wp_verify_nonce($_POST['bs_layout_nonce'], 'bs_layout_save_nonce')) return;
    if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return;
    if (!current_user_can('edit_post', $post_id)) return;

    // 保存列数
    if (isset($_POST['bs_col_count'])) {
        update_post_meta($post_id, '_bs_col_count', sanitize_text_field($_POST['bs_col_count']));
        $count = intval($_POST['bs_col_count']);
        // 保存每列内容
        for ($i=1; $i<=$count; $i++) {
            if (isset($_POST["bs_col_{$i}_content"])) {
                update_post_meta($post_id, "_bs_col_{$i}_content", wp_kses_post($_POST["bs_col_{$i}_content"]));
            }
        }
    }
}

2. 前端渲染Bootstrap布局

在主题的single.php或page.php中,判断是否有布局数据,然后输出对应的Bootstrap行和列:

<?php
// 获取布局数据
$bs_col_count = get_post_meta(get_the_ID(), '_bs_col_count', true);
if ($bs_col_count) {
    $col_class = 'col-md-' . (12 / $bs_col_count);
    echo '<div class="bs-row row g-4">'; // 加自定义类bs-row避免和Divi样式冲突
    for ($i=1; $i<=$bs_col_count; $i++) {
        $col_content = get_post_meta(get_the_ID(), "_bs_col_{$i}_content", true);
        if ($col_content) {
            echo "<div class=\"{$col_class}\">{$col_content}</div>";
        }
    }
    echo '</div>';
}
?>

3. 加载Bootstrap资源

如果主题没引入Bootstrap,在插件里加这段代码加载:

// 加载Bootstrap资源
add_action('wp_enqueue_scripts', 'bs_layout_enqueue_assets');
function bs_layout_enqueue_assets() {
    // 用CDN加载,也可以把文件放到插件目录本地加载
    wp_enqueue_style('bootstrap-css', 'https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css');
    wp_enqueue_script('bootstrap-js', 'https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js', [], null, true);
}

四、和Divi兼容的小细节

  • 可以在元框里加一个开关选项,让编辑人员选择是否启用这个Bootstrap布局,避免和Divi的布局冲突。
  • 给Bootstrap的行/列加自定义前缀类(比如bs-row、bs-col),防止和Divi的默认CSS样式冲突,保证布局正常显示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 08:20:28