我正在尝试创建一个插件,我遇到了一个小问题。
该插件包含一个简单的管理页面,其中包含用于执行功能的复选框。 所以我创建了一个在安装插件时创建新表的函数。 该表包含3列(ID,字段,州):
global $wpdb;
$mnzwpc_table_prefix=$wpdb->prefix.'mnzwpc_';
define('MNZWPC_TABLE_PREFIX', $mnzwpc_table_prefix);
function mnzwpc_install() {
global $wpdb;
$table = MNZWPC_TABLE_PREFIX."settings";
$structure = "CREATE TABLE $table (
id INT(9) NOT NULL AUTO_INCREMENT,
field VARCHAR(50) NOT NULL,
state VARCHAR(50) NOT NULL,
UNIQUE KEY id (id)
)";
$wpdb->query($structure);
$wpdb->query("INSERT INTO $table(field,state)
VALUES('setting','')
");
}
此处没有问题,我在安装插件时创建了表,并在卸载时删除了。
我的问题来自我的输入“。
选中复选框并点击“发送”后,我无法更改表格中的选项。
目前,我使用我创建的变量:
$my_setting = 'setting'; // Set the field name
$hidden_field_name = 'submit_hidden'; // Save my input hidden in a var
$data_field_name = 'setting'; // Set the field name in DB
// If we click on "Save Changes", add the datas to my db
if ( isset( $_POST[ $hidden_field_name ] ) && $_POST[ $hidden_field_name ] == 'Y' ) {
$opt_val = $_POST[ $data_field_name ];
update_option( $my_setting, $opt_val );
?> <p><strong>Changes Saved.</strong></p>
<?php } // End if ?>
这是我的管理页面:
<form action="" method="post">
<input type="hidden" name="<?php echo $hidden_field_name; ?>" value="Y">
<label for="<?php echo $data_field_name; ?>">Setting name</label>
<input id="<?php echo $data_field_name; ?>" type="checkbox" name="<?php echo $data_field_name; ?>" value="<?php echo $opt_val; ?>" />
<hr />
<p class="submit">
<input type="submit" name="Submit" class="button-primary" value="<?php esc_attr_e('Save Changes') ?>" />
</p>
</form>
当然,在我的插件代码中,我会检查选项并执行所需的操作:
function do_the_job() {
// Variables for the field and option names
$my_setting = 'setting';
// Read in existing option value from database
$opt_val = get_option( $my_setting );
if ($opt_val != '1') {
// Do something
}
}
在我的插件管理页面中,如果我选中一个复选框,然后单击“保存更改”,则设置不会保存在数据库中,并且复选框显示为未选中。但管理页面会刷新,并显示我的消息:已保存更改。
有什么想法吗?如果您需要完整的代码,我可以在Github上传我的插件:/
答案 0 :(得分:0)
复选框会像这样检查:
checked="checked"
所以,你必须做这样的事情(我使用单独的行来提高可读性):
<input id="<?php echo $data_field_name; ?>"
type="checkbox"
name="<?php echo $data_field_name; ?>"
value="<?php echo "the value to save in the database"; ?>"
<?php if($opt_val == "the value to save in the database") { ?>
checked="checked"
<?php } ?>
/>
你还有另一个问题。复选框如果已选中则上传,但如果未选中则不会上传。如果有人取消选中该复选框,您将如何将其保存在数据库中?您必须拥有代码,以确定是否不再提交先前已选中的复选框。
答案 1 :(得分:0)
是的确,“检查”值对我的输入不好。我决定实际使用另一种方法。
<input id="my_field"
type="checkbox"
name="my_field"
value="1"
<?php checked( (bool) get_option( 'my_field' ) ); ?>
/>
“已检查”现已存储在wp_options
(option_value = 1)中,因此我可以通过以下方式验证已检查状态:if ( get_option( 'my_field' ) == true ) { // Do something }
当然,如果用户取消选中它,则会移除option_value
。
我重建了所有插件代码,现在工作正常。当然,我的所有数据库代码都是错误的。如果我想在新表上工作,我必须使用$wpdb->update
之类的东西,并在数组中添加我的选项。
你的帮助@spsc_tech:)