如何在插件开发中从单个表单构建,保存和检索wp_options

时间:2014-06-06 14:44:54

标签: php wordpress-plugin wordpress

我正在使用一个简单的WP插件,我的第一个插件,并且我不知道使用wp_options函数处理update_options表的正确方法。我在我的插件中有这个代码:

<form name="frequent_traveler_form" method="post" action="<?php echo str_replace('%7E', '~', $_SERVER['REQUEST_URI']); ?>">
    <input type="hidden" name="frequent_traveler_hidden" value="Y">
    <?php echo "<h4>" . __('Common Settings') . "</h4>"; ?>
    <p><?php _e("Default Conversion Value: "); ?><input type="text" name="ft_default" value="<?php echo $ft_default; ?>" size="5"></p>
    <p><?php _e("From Date: "); ?><input type="text" id="frequent_traveler_from_date" name="frequent_traveler_from_date" value="<?php echo $frequent_traveler_from_date ?>" class="datepicker" /></p>
    <p><?php _e("To Date: "); ?><input type="text" id="frequent_traveler_to_date" name="frequent_traveler_to_date" value="<?php echo $frequent_traveler_to_date; ?>" class="datepicker" /></p>
    <p class="submit">
        <input type="submit" name="Submit" value="<?php _e('Save') ?>" />
    </p>
</form>

我需要做的是&#34;总是&#34;,在wp_options的某些配置选项中添加新值,所以每次加载插件配置时我都应该创建尽可能多的选项使用相同的表格。这就是我所做的,而我还没有测试过:

if ($_POST['ft_default'] && $_POST['frequent_traveler_from_date'] && $_POST['frequent_traveler_to_date'] && $_POST['ft_default'] != "" && $_POST['frequent_traveler_from_date'] != "" && $_POST['frequent_traveler_to_date'] != "") {
                $ft_options = array(
                    'ft_default' => $_POST['ft_default'],
                    'frequent_traveler_from_date' => $_POST['frequent_traveler_from_date'],
                    'frequent_traveler_to_date' => $_POST['frequent_traveler_to_date']
                );
                update_option('ft_options', $ft_options);
            }

是吗?我是怎么做到的?

更新

这是我在frequent-traveler.php(主插件文件)和其他函数中的含义:

function frequent_traveler_admin_actions()
{
    add_options_page("Frequent Traveler Configuration", "Frequent Traveler Config", 'manage_options', "ftconfig", "frequent_traveler_admin");
}

add_action('admin_menu', 'frequent_traveler_admin_actions');

function frequent_traveler_admin()
{
    include('ft_admin.php');
}

这是ft_admin.php的代码:

<?php
wp_enqueue_script('jquery-ui-datepicker');
wp_enqueue_style('jquery-style', 'http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.2/themes/smoothness/jquery-ui.css');

?>

<div class="wrap">
    <?php echo "<h2>" . __('Frequent Traveler Configuration') . "</h2>"; ?>
    <form name="frequent_traveler_form" method="post" action="<?php echo str_replace('%7E', '~', $_SERVER['REQUEST_URI']); ?>">
        <input type="hidden" name="frequent_traveler_hidden" value="Y">
        <?php echo "<h4>" . __('Common Settings') . "</h4>"; ?>
        <p><?php _e("Default Conversion Value: "); ?><input type="text" name="ft_default" value="<?php echo $ft_default; ?>" size="5"> 
            <?php _e("From Date: "); ?><input type="text" id="frequent_traveler_from_date" name="frequent_traveler_from_date" value="<?php echo $frequent_traveler_from_date ?>" class="datepicker" />
        <?php _e("To Date: "); ?><input type="text" id="frequent_traveler_to_date" name="frequent_traveler_to_date" value="<?php echo $frequent_traveler_to_date; ?>" class="datepicker" /></p>
        <p class="submit">
            <input type="submit" name="Submit" value="<?php _e('Save') ?>" />
        </p>
    </form>
</div>

<div class="wrap">
    <table class="widefat">
        <thead>
            <tr>
                <td>Conversion Value</td>
                <td>From Date</td>
                <td>To Date</td>
            </tr>
        </thead>
        <tfoot>
            <tr>
                <td>Conversion Value</td>
                <td>From Date</td>
                <td>To Date</td>
            </tr>
        </tfoot>
        <tbody>
            <?php
            global $wpdb;

            if ($_POST['ft_default'] && $_POST['frequent_traveler_from_date'] && $_POST['frequent_traveler_to_date'] && $_POST['ft_default'] != "" && $_POST['frequent_traveler_from_date'] != "" && $_POST['frequent_traveler_to_date'] != "") {
                $ft_options = array(
                    'ft_default' => $_POST['ft_default'],
                    'frequent_traveler_from_date' => $_POST['frequent_traveler_from_date'],
                    'frequent_traveler_to_date' => $_POST['frequent_traveler_to_date']
                );
                update_option('ft_options', $ft_options);
            }

            $config_options = $wpdb->get_results("SELECT * FROM " . $wpdb->prefix . "options");
            foreach ($config_options as $cop) {

                ?>
                <tr>
                    <td><?php echo $cop->ft_default ?></td>
                    <td><?php echo $cop->from_date ?></td>
                    <td><?php echo $cop->to_date ?></td>
                </tr>
            <?php } ?>
        </tbody>
    </table>
</div>

<script>
    jQuery(document).ready(function() {
        jQuery('.datepicker').datepicker({
            dateFormat: 'dd/mm/yy'
        });
    });
</script>

我尝试了this gist代码,只需在ft_admin.phpwp_enqueue_script电话下方的wp_enqueue_style顶部编写代码,这是不起作用的,我做了什么错?

更新2

我已将此代码添加到ft_admin.php文件中:

<?php
wp_enqueue_script('jquery-ui-datepicker');
wp_enqueue_style('jquery-style', 'http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.2/themes/smoothness/jquery-ui.css');

add_action('admin_init', 'add_meta_boxes', 1);

function add_meta_boxes()
{
    add_meta_box('repeatable-fields', 'Promotions', 'repeatable_meta_box_display');
}

function repeatable_meta_box_display()
{
    echo "I'm here";    
}

没有显示,该代码有什么问题?

0 个答案:

没有答案
相关问题