wordpress自定义字段添加下拉框、复选框等表单项

Wordpress 投稿&转载 986浏览

我们在wordpress主题开发时,还是可以大大地利用wordpress自定义字段的更加强大的功能的。比如:自定义面版中添加单选框、复选框、文本框、文本域、下拉选择框、上传图片等等。那么,怎样在wordpress自定义面版中添加下拉框、复选框这些表单项呢?这就是本章要讲的内容了,本章我们将给自定义面板添加简单的表单:文本框、文本域、单选框、复选框、下拉选择框。完成后,效果如下图:

自定义字段

1、添加字段数组,代码如下:

$new_meta_boxes =
array(
"title" => array(
"name" => "_meta_title",
"std" => "",
"title" => "标题",
"type"=>"title"),

"keywords" => array(
"name" => "_meta_keywords",
"std" => "",
"title" => "关键字",
"type"=>"text"),

"description" => array(
"name" => "_meta_description",
"std" => "",
"title" => "描述",
"type"=>"textarea"),

"category" => array(
"name" => "_meta_cate",
"std" => "",
"title" => "选择分类",
"subtype"=> "cat",
"type"=>"dropdown"),

"radio" => array(
"name" => "_meta_radio",
"std" => 1,
"title" => "单选框",
"buttons" => array('Yes','No'),
"type"=>"radio"),

"checkbox" => array(
"name" => "_meta_checkbox",
"std" => 1,
"title" => "复选框",
"type"=>"checkbox"),

);

这段代码是我们要在自定义面版中需要添加的表单项。

2、创建自定义面版内容函数,代码如下:

//面板内容的函数
function new_meta_boxes() {
global $post, $new_meta_boxes;
foreach($new_meta_boxes as $meta_box) {
$meta_box_value = get_post_meta($post->ID, $meta_box['name'].'_value', true);
if($meta_box_value != "")
$meta_box['std'] = $meta_box_value;

echo'<input type="hidden" name="'.$meta_box['name'].'_noncename" id="'.$meta_box['name'].'_noncename" value="'.wp_create_nonce( plugin_basename(__FILE__) ).'" />';
switch ( $meta_box['type'] ){
case 'title':
echo'<h4>'.$meta_box['title'].'</h4>';
break;
case 'text':
echo'<h4>'.$meta_box['title'].'</h4>';
echo '<input type="text" size="40" name="'.$meta_box['name'].'_value" value="'.$meta_box['std'].'" /><br />';
break;
case 'textarea':
echo'<h4>'.$meta_box['title'].'</h4>';
echo '<textarea cols="60" rows="3" name="'.$meta_box['name'].'_value">'.$meta_box['std'].'</textarea><br />';
break;
case 'dropdown':
echo'<h4>'.$meta_box['title'].'</h4>';
if($meta_box['subtype'] == 'cat'){
$select = 'Select category';
$entries = get_categories('title_li=&orderby=name&hide_empty=0');//获取分类
}
echo '<p><select name="'.$meta_box['name'].'_value"> ';
echo '<option value="">'.$select .'</option> ';
foreach ($entries as $key => $entry){
$id = $entry->term_id;
$title = $entry->name;
if ( $meta_box['std'] == $id ){
$selected = "selected='selected'";
}else{
$selected = "";
}
echo "<option $selected value='". $id."'>". $title."</option>";
}
echo '</select><br />';
break;
case 'radio':
echo'<h4>'.$meta_box['title'].'</h4>';
$counter = 1;
foreach( $meta_box['buttons'] as $radiobutton ) {
$checked ="";
if(isset($meta_box['std']) && $meta_box['std'] == $counter) {
$checked = 'checked = "checked"';
}
echo '<input '.$checked.' type="radio" class="kcheck" value="'.$counter.'" name="'.$meta_box['name'].'_value"/>'.$radiobutton;
$counter++;
}
break;
case 'checkbox':
echo'<h4>'.$meta_box['title'].'</h4>';
if( isset($meta_box['std']) && $meta_box['std'] == 'true' )
$checked = 'checked = "checked"';
else
$checked = '';
echo '<input type="checkbox" name="'.$meta_box['name'].'_value" value="true" '.$checked.' />';
break;

}
}
}

3、创建自定义面版,代码如下:

function create_meta_box() {
global $theme_name;

if ( function_exists('add_meta_box') ) {
add_meta_box( 'new-meta-boxes', '自定义模块', 'new_meta_boxes', 'post', 'normal', 'high' );
}
}

4、保存更新自定义面版数据。代码如下:

function save_postdata( $post_id ) {
global $post, $new_meta_boxes;

foreach($new_meta_boxes as $meta_box) {
if ( !wp_verify_nonce( $_POST[$meta_box['name'].'_noncename'], plugin_basename(__FILE__) )) {
return $post_id;
}

if ( 'page' == $_POST['post_type'] ) {
if ( !current_user_can( 'edit_page', $post_id ))
return $post_id;
}
else {
if ( !current_user_can( 'edit_post', $post_id ))
return $post_id;
}

$data = $_POST[$meta_box['name'].'_value'];

if(get_post_meta($post_id, $meta_box['name'].'_value') == "")
add_post_meta($post_id, $meta_box['name'].'_value', $data, true);
elseif($data != get_post_meta($post_id, $meta_box['name'].'_value', true))
update_post_meta($post_id, $meta_box['name'].'_value', $data);
elseif($data == "")
delete_post_meta($post_id, $meta_box['name'].'_value', get_post_meta($post_id, $meta_box['name'].'_value', true));
}
}

5、添加动作触发函数。代码如下:

add_action('admin_menu', 'create_meta_box');
add_action('save_post', 'save_postdata');

相关函数,我们在前面已经做了详细的解说,所以这里就不多说了,只是帖出代码,供大家参考。

推荐阅读

WordPress4.9分支最新版更新至4.9.26

WordPress其实很早之前就已经更新到6.x版本了,不过本博客一直使用4.9分支。幸运的是,这个版本的分支仍在更新中。该版本已于2024年1月31日更新至4.9.25版本。 下载链接 [下载]https://cn.wordpress.......

纯代码实现wordpress附件页面重定向到文章或首页

前几天发现wordpress网站有评论留言的回顾。结果一看就是附件页面的垃圾评论。这才发现原来wordpress上传的附件也会有对应的页面。难怪之前收录了很多附件页面,但是我的机器人禁止了,忘记了。本来以为会禁用,结果只找到了在线使用插件的方法。最后......

Warning: call_user_func_array() expects parameter 1 to be a valid callback, function ‘fake_update_callback’

这是当一个被挂钩的函数名与挂钩关联不匹配时…这可能发生在重命名一个函数时,而不是在挂钩关联中重命名函数名时。如果强迫症受不了wordpress的主题提示,可以使用插件WP降级将版本设置为当前版本。...