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

WordPress滑块插件开发:如何将设置页POST参数传递到前端模板替换图片

WordPress滑块插件参数传递需求

开发背景

我正在开发一款教育用途的WordPress滑块插件,用于熟悉WP PHP生态体系。目前我已经完成了插件的文件结构搭建,使用Bootstrap实现了可用的轮播效果。接下来我需要创建设置页,用于上传轮播图片并为每张图片配置对应文本,目前我已经完成了设置页和对应表单的开发,现在需要了解如何将表单提交的POST变量传递到我的template.html文件中,替换其中img标签的src属性值与对应文本内容。

现有代码

options.php文件代码

<?php
//Plugin Options Menu
/** Adds menu in the WP admin area*/
add_action('admin_menu', 'sd_cool_plugin_create_menu');
//create menu
function sd_cool_plugin_create_menu() {
    //create new top-level menu
    add_menu_page('My Cool Plugin Settings', 'Cool Settings', 'administrator', __FILE__, 'my_cool_plugin_settings_page' , plugins_url('/images/icon.png', __FILE__) );
    //call register settings function
    add_action( 'admin_init', 'register_mysettings' );
}
add_action( 'admin_menu', 'sd_slider_settings' );
add_action( 'admin_init', 'register_mysettings' );
//register settings
function register_mysettings() { // whitelist options
    register_setting( 'sd-option-group', 'new_option_name' );
    register_setting( 'sd-option-group', 'some_other_option' );
    register_setting( 'sd-option-group', 'option_etc' );
}
//add icon
/** Step 1. */
function sd_slider_settings() {
    add_options_page( 'SD Slider Settings', 'SD Slider', 'manage_options', 'my-unique-identifier', 'sd_plugin_options' );
    add_menu_page('SD Slider Plugin Settings', 'Cool Settings', 'administrator', __FILE__, 'my_cool_plugin_settings_page', get_stylesheet_directory_uri('stylesheet_directory')."/images/logo.png");
}
/** Step 3. */
function sd_plugin_options() {
    if ( !current_user_can( 'manage_options' ) )  {
        wp_die( __( 'You do not have sufficient permissions to access this page.' ) );
    }
    echo '<div class="wrap">';
    echo '<h1>SD Slider Plugin Options</h1>';
    echo '</div>';?>
    
    <form method="post" action="template.php" enctype="multipart/form-data">
        <?php settings_fields( 'sd-option-group' ); ?>
<!-- settings input form -->
<div class="form-group">
    <!-- 1st image -->
    <label for="exampleFormControlFile1">Choose the 1st image</label>
    <input type="file" class="form-control-file" id="exampleFormControlFile1" name="image1">
<br>
    <label for="fname">Headline:</label>
<input type="text" id="headline1" name="headline1"><br><br>
<br>
<label for="fname">Caption:</label>
<input type="text" id="headline1" name="headline1"><br><br>
<br>
<!-- 2nd image -->
    <label for="exampleFormControlFile2">Choose the 2nd image</label>
    <input type="file" class="form-control-file" id="exampleFormControlFile2" name="image2">
<br>
    <label for="fname">Headline:</label>
<input type="text" id="headline2" name="headline2"><br><br>
<br>
<label for="fname">Caption:</label>
<input type="text" id="headline2" name="headline2"><br><br>
<!-- 3rd image -->
<br>
    <label for="exampleFormControlFile3">Choose the 3rd image</label>
    <input type="file" class="form-control-file" id="exampleFormControlFile3" name="image3">
<br>
    <label for="fname">Headline:</label>
<input type="text" id="headline3" name="headline3"><br><br>
<br>
<label for="fname">Caption:</label>
<input type="text" id="headline3" name="headline3"><br><br>
<?php submit_button(); ?>
</div>
</form>
<?
}
//Plugin Options Menu End
?>
<?php
// create custom plugin settings menu
add_action('admin_menu', 'my_cool_plugin_create_menu');
function my_cool_plugin_create_menu() {
    //create new top-level menu
    add_menu_page('My Cool Plugin Settings', 'Cool Settings', 'administrator', __FILE__, 'my_cool_plugin_settings_page' , plugins_url('/images/icon.png', __FILE__) );
    //call register settings function
    add_action( 'admin_init', 'register_my_cool_plugin_settings' );
}
function register_my_cool_plugin_settings() {
    //register our settings
    register_setting( 'my-cool-plugin-settings-group', 'new_option_name' );
    register_setting( 'my-cool-plugin-settings-group', 'some_other_option' );
    register_setting( 'my-cool-plugin-settings-group', 'option_etc' );
}
function my_cool_plugin_settings_page() {
?>
<div class="wrap">
<h1>Your Plugin Name</h1>
<form method="post" action="options.php">
    <?php settings_fields( 'my-cool-plugin-settings-group' ); ?>
    <?php do_settings_sections( 'my-cool-plugin-settings-group' ); ?>
    <table class="form-table">
        <tr valign="top">
        <th scope="row">New Option Name</th>
        <td><input type="text" name="new_option_name" value="<?php echo esc_attr( get_option('new_option_name') ); ?>" /></td>
        </tr>
        
        <tr valign="top">
        <th scope="row">Some Other Option</th>
        <td><input type="text" name="some_other_option" value="<?php echo esc_attr( get_option('some_other_option') ); ?>" /></td>
        </tr>
        
        <tr valign="top">
        <th scope="row">Options, Etc.</th>
        <td><input type="text" name="option_etc" value="<?php echo esc_attr( get_option('option_etc') ); ?>" /></td>
        </tr>
    </table>
    
    <?php submit_button(); ?>
</form>
</div>
<?php } ?>

前端代码

JS逻辑代码

var $ = jQuery;
$(document).ready(function(){
    var myCarousel = document.querySelector('#myCarousel');
    var carousel = new bootstrap.Carousel(myCarousel);
    $('#page').prepend("<div id='slider-container'></div>");
    $("#slider-container").load("wp-content/plugins/slider-plugin/template.html") ;
  });

HTML模板代码

<div id="myCarousel" class="carousel slide" data-bs-ride="carousel">
    <div class="carousel-indicators">
      <button type="button" data-bs-target="#myCarousel" data-bs-slide-to="0" class="active" aria-current="true" aria-label="Slide 1"></button>
      <button type="button" data-bs-target="#myCarousel" data-bs-slide-to="1" aria-label="Slide 2"></button>
    </div>
    <div class="carousel-inner">
      <div class="carousel-item active">
<img width="100%" height="100%" aria-hidden="true" preserveAspectRatio="xMidYMid slice" focusable="false" src="https://external-content.duckduckgo.com/iu/?u=https%3A%2F%2Fwww.jqueryscript.net%2Fdemo%2FResponsive-Full-Width-jQuery-Image-Slider-Plugin-skdslider%2Fslides%2F1.jpg&f=1&nofb=1" alt="">
        <div class="container">
          <div class="carousel-caption text-start">
            <h1>Example headline.</h1>
            <p>Some representative placeholder content for the first slide of the carousel.</p>
            <p><a class="btn btn-lg btn-primary" href="#">Sign up today</a></p>
          </div>
        </div>
      </div>
      <div class="carousel-item">
<img width="100%" height="100%" aria-hidden="true" preserveAspectRatio="xMidYMid slice" focusable="false" src="https://external-content.duckduckgo.com/iu/?u=https%3A%2F%2Fwww.jqueryscript.net%2Fdemo%2FResponsive-Full-Width-jQuery-Image-Slider-Plugin-skdslider%2Fslides%2F1.jpg&f=1&nofb=1" alt="">
        <div class="container">
          <div class="carousel-caption">
            <h1>Another example headline.</h1>
            <p>Some representative placeholder content for the second slide of the carousel.</p>
            <p><a class="btn btn-lg btn-primary" href="#">Learn more</a></p>
          </div>
        </div>
      </div>
    </div>
    <button class="carousel-control-prev" type="button" data-bs-target="#myCarousel" data-bs-slide="prev">
      <span class="carousel-control-prev-icon" aria-hidden="true"></span>
      <span class="visually-hidden">Previous</span>
    </button>
    <button class="carousel-control-next" type="button" data-bs-target="#myCarousel" data-bs-slide="next">
      <span class="carousel-control-next-icon" aria-hidden="true"></span>
      <span class="visually-hidden">Next</span>
    </button>
  </div>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 15:09:05