我正在尝试向主题添加一些代码,允许用户更改徽标或使用一些文本。我设法找到了奥托发布的一些代码来上传文件。
我添加了我认为是如何添加其他字段的内容,但由于某些原因,这些字段无法保存,我相信这是我错过的非常简单的内容:
add_action(\'admin_init\', \'ld_admin_init\');
function ld_admin_init() {
register_setting( \'ld_options\', \'ld_options\', \'ld_options_validate\' );
add_settings_section(\'ld_main\', \'Upload\', \'ld_section_text\', \'ld\');
add_settings_field(\'ld_setting_checkbox\', \'Use image\', \'ld_setting_checkbox\', \'ld\', \'ld_main\');
add_settings_field(\'ld_setting_string\', \'Logo text\', \'ld_setting_string\', \'ld\', \'ld_main\');
add_settings_field(\'ld_filename\', \'File:\', \'ld_setting_filename\', \'ld\', \'ld_main\');
}
// add the admin options page
add_action(\'admin_menu\', \'ld_admin_add_page\');
function ld_admin_add_page() {
$mypage = add_theme_page(\'Logo\', \'Logo\', \'manage_options\', \'ld\', \'ld_options_page\');
}
// display the admin options page
function ld_options_page() {
?>
<div class="wrap">
<h2>Logo settings</h2>
<p>You can upload a new logo.</p>
<form method="post" enctype="multipart/form-data" action="options.php">
<?php settings_fields(\'ld_options\'); ?>
<?php do_settings_sections(\'ld\'); ?>
<p class="submit">
<input type="submit" name="Submit" class="button-primary" value="<?php esc_attr_e(\'Save Changes\') ?>" />
</p>
</form>
</div>
<?php
}
function ld_section_text() {
$options = get_option(\'ld_options\');
echo \'<p>Upload your file here:</p>\';
if ($file = $options[\'file\']) {
//var_dump($file);
echo "<img src=\'{$file[\'url\']}\' />";
}
}
function ld_setting_filename() {
echo \'<input type="file" name="ld_filename" size="40" />\';
}
function ld_setting_checkbox() {
$usetext = get_option(\'ld_options\');
if($usetext[\'chkbox1\']) { $checked = \' checked="checked" \'; }
echo "<input ".$checked." id=\'plugin_chk1\' name=\'ld_options[chkbox1]\' type=\'checkbox\' />";
}
function ld_setting_string() {
$logotext = get_option(\'ld_options\');
echo "<input id=\'ld_logo_text\' name=\'ld_options[text_string]\' size=\'40\' type=\'text\' value=\'{$logotext[\'text_string\']}\' />";
}
function ld_options_validate($input) {
$newinput = array();
if ($_FILES[\'ld_filename\']) {
$overrides = array(\'test_form\' => false);
$file = wp_handle_upload($_FILES[\'ld_filename\'], $overrides);
$newinput[\'file\'] = $file;
}
return $newinput;
}
我想能够设置它,以便他们可以上传图像,如果框被勾选,则图像用于徽标,否则将显示文本。我需要保存信息,以便在输出中使用它。
SO网友:sanchothefat
据我从代码中看到的,问题是您没有在ld_options_validate()
作用您只需返回$newinput
只能包含文件名的数组。
尝试以下方法ld_options_validate()
:
function ld_options_validate( $input ) {
// set $newinput to the $input that was POSTed
$newinput = $input;
// update the file field
if ($_FILES[\'ld_filename\']) {
$overrides = array(\'test_form\' => false);
$file = wp_handle_upload($_FILES[\'ld_filename\'], $overrides);
$newinput[\'file\'] = $file;
} else {
$newinput[\'file\'] = maybe_unserialize( $input[\'file\'] );
}
return $newinput;
}
虽然这表明修复了其他字段的实际问题,但您需要维护
file
部分
$input
因此,当没有上载图像时,它不会被覆盖。为此,您需要存储
file
在表单中的隐藏字段中,尽管由于序列化,事情可能会变得棘手。
显示图像的位置ld_section_text()
添加以下内容:
echo \'<input type="hidden" name="ld_options[file]" value="\' . serialize( $file ) . \'" />\';
我很想分别注册每个字段的设置,以简化验证。