wordpress不靠插件实现多张Banner替换增删功能
文章摘要:代码实现,在主题文件functions.php里增加代码: ** 需要有js文件 配合 后台引入 banner.js 不然上传按钮无反应 function load_scripts() { wp_enqueue_script( 'banne...
代码实现,在主题文件functions.php里增加代码:
** 需要有js文件 配合 后台引入 banner.js 不然上传按钮无反应
function load_scripts() { wp_enqueue_script( 'banner-js', get_template_directory_uri() . '/js/banner.js', array( 'jquery' ), '1.0.0', true ); // 加载自定义的 banner.js 脚本 } add_action( 'admin_enqueue_scripts', 'load_scripts' ); //后台需要配合js 完成上传 // 注册自定义的 post type 菜单栏里 显示 Banners 项 function register_banner_post_type() { register_post_type( 'banner', array( 'labels' => array( 'name' => 'Banners', 'singular_name' => 'Banner', ), 'public' => true, 'supports' => array( 'title', 'thumbnail' ), 'menu_icon' => 'dashicons-format-image', 'rewrite' => array( 'slug' => 'banner' ), )); } add_action( 'init', 'register_banner_post_type' ); // 添加自定义的 meta box function banner_meta_box() { add_meta_box( 'banner_meta_box', 'Banner Image', 'banner_meta_box_callback', 'banner', 'side', 'high' ); } add_action( 'add_meta_boxes', 'banner_meta_box' ); // 渲染 meta box 的 HTML function banner_meta_box_callback( $post ) { wp_nonce_field( basename( __FILE__ ), 'banner_meta_box_nonce' ); $image = get_post_meta( $post->ID, '_banner_image', true ); if ( $image ) { // 存在使用 数据库里的 echo '<img src="' . esc_url( $image ) . '" style="max-width: 100%;" />'; }else{ // 不存在的话 默认 也有空的标签 不然会出现 显示不了图片标签 echo '<img src="" style="max-width: 100%;" />'; } // 这里的ID 名和banner.js的对应 echo '<input type="hidden" name="banner_image" id="banner_image" value="' . esc_attr( $image ) . '" />'; echo '<p><button type="button" class="button button-primary" id="upload_banner_image">Upload Image</button></p>'; echo '<p><button type="button" class="button" id="remove_banner_image">Remove Image</button></p>'; } // 保存自定义的 meta box 字段 function save_banner_meta_box( $post_id ) { if ( ! isset( $_POST['banner_meta_box_nonce'] ) || ! wp_verify_nonce( $_POST['banner_meta_box_nonce'], basename( __FILE__ ) ) ) { return; } if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) { return; } if ( isset( $_POST['post_type'] ) && 'banner' == $_POST['post_type'] ) { if ( ! current_user_can( 'edit_page', $post_id ) ) { return; } } else { if ( ! current_user_can( 'edit_post', $post_id ) ) { return; } } if ( isset( $_POST['banner_image'] ) ) { $image = sanitize_text_field( $_POST['banner_image'] ); update_post_meta( $post_id, '_banner_image', $image ); } } add_action( 'save_post', 'save_banner_meta_box' );
上面这个增加完成后,在后台主菜单里,就有个名叫“Banners”的菜单,像发布文章一样,发布图片
新建banner.js,可以也在模板目录里,引用的时候注意路径即可,因为wp的主文件会自带jquery,可以直接使用jquery语法编写,上传功能和删除功能
jQuery(document).ready(function ($) { var custom_uploader; $('#upload_banner_image').click(function (e) { e.preventDefault(); if (custom_uploader) { custom_uploader.open(); return; } custom_uploader = wp.media.frames.file_frame = wp.media({ title: 'Choose Image', button: { text: 'Choose Image' }, multiple: false }); custom_uploader.on('select', function () { var attachment = custom_uploader.state().get('selection').first().toJSON(); $('#banner_image').val(attachment.url); $('div#banner_meta_box img').attr('src', attachment.url).css('max-width', '100%'); }); custom_uploader.open(); }); // 删除图片 按钮 $('#remove_banner_image').click(function (e) { e.preventDefault(); $('#banner_image').val(''); $('div#banner_meta_box img').attr('src', ''); }); });
最后在需要调用banner的地方循环调取:
<div id="banner-carousel" class="carousel slide" data-ride="carousel"> <!-- Wrapper for slides --> <div class="carousel-inner"> <?php $query = new WP_Query( array( 'post_type' => 'banner', 'posts_per_page' => -1, ) ); $active = true; while ( $query->have_posts() ) : $query->the_post(); $image = get_post_meta( get_the_ID(), '_banner_image', true ); if ( ! $image ) { continue; } ?> <div class="item<?php echo $active ? ' active' : ''; ?>"> <img src="<?php echo esc_url( $image ); ?>" alt="<?php the_title_attribute(); ?>"> <?php if ( get_the_title() || get_the_content() ) : ?> <div class="carousel-caption"> <?php if ( get_the_title() ) : ?> <h3><?php the_title(); ?></h3> <?php endif; ?> <?php if ( get_the_content() ) : ?> <p><?php the_content(); ?></p> <?php endif; ?> </div> <?php endif; ?> </div> <?php $active = false; endwhile; wp_reset_postdata(); ?> </div> <!-- Controls --> <a class="left carousel-control" href="#banner-carousel" data-slide="prev"> <span class="glyphicon glyphicon-chevron-left"></span> </a> <a class="right carousel-control" href="#banner-carousel" data-slide="next"> <span class="glyphicon glyphicon-chevron-right"></span> </a> </div>
成功调取到后台设置的多种banner就可以用相应的前端插件实现图片轮播。
版权免责申明
① 本站源码模板等资源SVIP用户永久不限量免费下载
② 所有资源来源于网络收集,如有侵权,请联系站长进行删除处理。
③ 分享目的仅供大家学习和交流,请不要用于商业用途,否则后果自负。
④ 如果你有源码需要出售,可以联系管理详谈。
⑤ 本站提供的源码、模板、插件等等资源,都不包含技术服务请大家谅解。
⑥ 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需。
⑦ 在您的能力范围内,为了大环境的良性发展,请尽可能的选择正版资源。
⑧ 网站资源绝不做任何二次加密或添加后门(原版加密除外)
① 本站源码模板等资源SVIP用户永久不限量免费下载
② 所有资源来源于网络收集,如有侵权,请联系站长进行删除处理。
③ 分享目的仅供大家学习和交流,请不要用于商业用途,否则后果自负。
④ 如果你有源码需要出售,可以联系管理详谈。
⑤ 本站提供的源码、模板、插件等等资源,都不包含技术服务请大家谅解。
⑥ 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需。
⑦ 在您的能力范围内,为了大环境的良性发展,请尽可能的选择正版资源。
⑧ 网站资源绝不做任何二次加密或添加后门(原版加密除外)
常见问题F&Q
- 需要积分的资源怎么下载?
- 您可以注册后签到等活跃动作获得积分,积分可下载,也可充值升级等级免费下载。
- 源码模板等文件安全吗?有没有后门病毒吗?
- 站内资源标有“已测试”标签的资源源码,表示已经在本地安装测试调试过才分享出来的,可以保证一定的安全;若不放心可以自行下载模板资源后使用D盾等查杀工具扫一遍确认安全。
- 本站网站模板等源码提供安装服务吗?
- 本站资源收集于网络并分享出来共同学习,不提供免费安装服务,模板源码安装等需要有一定熟悉度,小白用户可以下载资源后雇人安装调试。