在开发主题后,发现主题的幻灯片没办法在后台自定义增加,或者说没办法循环,只能增加固定数量的幻灯片;所以特地弄了个可以无限循环的出来,下面贴代码。
创建自定义分类
<?php add_action('init', 'ashu_post_type'); function ashu_post_type() { /**********幻灯片*****************/ register_post_type( 'banner',//自定义字段别名(url) array( 'labels' => array( 'name' => '幻灯片', 'singular_name' => '幻灯片', 'add_new' => '添加', 'add_new_item' => '添加新幻灯片', 'edit_item' => '编辑幻灯片', 'new_item' => '新幻灯片' ), 'public' => true, 'has_archive' => false, 'exclude_from_search' => true, 'menu_position' => 5, 'supports' => array( 'title','thumbnail',), ) ); }
创建自定义分类字段
//幻灯片自定义字段 $banner_post_meta_boxes = array( "banner_c" => array( "name" => "banner_c", "std" => "", "title" => "第一行文字", "type"=>"text"), "banner_b" => array( "name" => "banner_b", "std" => "", "title" => "白色标题", "type"=>"text"), "banner_a" => array( "name" => "banner_a", "std" => "", "title" => "黄色标题", "type"=>"text"), "banner_g" => array( "name" => "banner_g", "std" => "", "title" => "白色标题", "type"=>"text"), "banner_h" => array( "name" => "banner_h", "std" => "", "title" => "长文本", "type"=>"text"), "banner_d" => array( "name" => "banner_d", "std" => "", "title" => "输入链接地址", "type"=>"text"), "banner_e" => array( "name" => "banner_e", "std" => "", "title" => "按钮名称", "type"=>"text"), "banner_f" => array( "name" => "banner_f", "std" => "", "title" => "输入图片地址 ( 必填 )", "type"=>"banner"), );
面板内容
// 面板内容 function banner_post_meta_boxes() { global $post, $banner_post_meta_boxes; //获取保存 foreach ($banner_post_meta_boxes as $meta_box) { $meta_box_value = get_post_meta($post->ID, $meta_box['name'] . '', 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__)) . '" />'; //选择类型输出不同的html代码 switch ($meta_box['type']) { case 'title': echo '<h4>' . $meta_box['title'] . '</h4>'; break; case 'text': echo '<h4>' . $meta_box['title'] . '</h4>'; echo '<span class="form-field"><input type="text" size="40" name="' . $meta_box['name'] . '" value="' . $meta_box['std'] . '" /></span><br />'; break; case 'banner': echo '<h4>' . $meta_box['title'] . '</h4>'; echo '<span class="form-field file-banners"><input type="text" size="40" name="' . $meta_box['name'] . '" value="' . $meta_box['std'] . '" /><a href="javascript:;" class="bit_file button">选择图片</a></span><br />'; break; } } } // 创建面板 function banner_post_meta_box() { global $theme_name; if (function_exists('add_meta_box')) { add_meta_box('banner_post_meta_box', '首页幻灯片', 'banner_post_meta_boxes', 'banner', 'normal', 'high'); } } // 保存数据 function save_banner_post_postdata($post_id) { global $post, $banner_post_meta_boxes; foreach ($banner_post_meta_boxes as $meta_box) { if ( !isset($_POST[$meta_box['name'] . '_noncename']) || !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'] . '']; if (get_post_meta($post_id, $meta_box['name'] . '') == "") add_post_meta($post_id, $meta_box['name'] . '', $data, true); elseif ($data != get_post_meta($post_id, $meta_box['name'] . '', true)) update_post_meta($post_id, $meta_box['name'] . '', $data); elseif ($data == "") delete_post_meta($post_id, $meta_box['name'] . '', get_post_meta($post_id, $meta_box['name'] . '', true)); } } add_action('admin_menu', 'banner_post_meta_box'); add_action('save_post', 'save_banner_post_postdata');
最后是预览
//自定义幻灯片预览 add_filter( 'manage_edit-banner_columns', 'banner_custom_columns' ); function banner_custom_columns( $columns ) { $columns = array( 'cb' => '<input type="checkbox" />', 'title' => '幻灯片名', 'banner_f' => '幻灯片预览', 'banner_d' => '链接到', 'date' => '日期' ); return $columns; } add_action( 'manage_banner_posts_custom_column', 'banner_manage_custom_columns', 10, 2 ); function banner_manage_custom_columns( $column, $post_id ) { global $post; switch( $column ) { case "banner_d": if(get_post_meta($post->ID, "banner_d", true)){ echo get_post_meta($post->ID, "banner_d", true); } else {echo '----';} break; case "banner_f": $slider_pic = get_post_meta($post->ID, "banner_f", true); echo '<img src="'.$slider_pic.'" width="95" height="41" alt="" />'; break; default : break; } }
前端循环调用
前端循环调用的话,因为是自定义分类法,所以需要输出指定分类法,下面贴代码。
<?php
$args = array(
‘post_type’=>’banner’,//自定义分类法别名(必须是对应的)
);
query_posts($args);
if( have_posts() ) : ?>
循环
<?php while( have_posts() ) : the_post(); $image_url = get_post_meta($post->ID,'banner_f',true); if($image_url!=''){ ?>
接下来调用字段
<?php echo $image_url; ?>);">//这个是必须填入的字段,因为前面已经定位好了,这个不输入,则不显示。 <?php echo get_post_meta($post->ID,'banner_c',true);?>//这里对应上面的设的自定义字段,对应填入就行。
结束循环
<?php } endwhile; ?>
结束
<?php endif; wp_reset_query(); ?>