File: /www/wwwroot/www.scdc-marine.com/wp-content/themes/heku-cms/HekuClass/Admin/Cmb2Post.php
<?php
namespace Heku\HekuClass\Admin;
/**
* @package Heku\HekuClass\Admin
* @subpackage Classes/Cmb2Post
* @author Heku Daleconan <http://www.daleconan.com>
* @copyright Copyright (c) 2022-2023, Heku Daleconan
* @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
*/
class Cmb2Post {
/**
* 类实现单例模式,类的独生子女
*/
private static $instance;
/**
* 依赖注入的接口 Instance 方法
* 目标是 保证 init() 初始化方法 只执行一次
*
* @return self 唯一实例化的本类
*/
public static function instance() {
if ( ! isset( self::$instance ) ) {
self::$instance = new self;
self::$instance->init();
}
return self::$instance;
}
private function init() {
add_action( 'cmb2_admin_init', array($this,'cmb2_post_metabox'));
add_action( 'edit_form_after_title', array( $this, 'edit_form_after_title' ) );
add_action( 'edit_form_after_editor', array( $this, 'edit_form_after_editor' ) );
}
public function cmb2_post_metabox() {
$post_metabox = new_cmb2_box(array(
'id' => 'post_after_title_metabox',
'option_key' => 'heku_post_main',
'object_types' => array( 'post'),
'context' => 'after_title',
'remove_box_wrap' => true,
));
// 产品缩略图 设置 开始
$post_metabox->add_field( array(
'before_row'=>'<div id="product_img_div">',
'name' => '产品 轮播图片 + 第一张非视频图片,将默认为缩略图',
'desc' => '产品轮播图片,点击编辑特殊字段,可以填写视频链接,将调用为视频播放,图片尺寸建议1:1 ,尺寸建议800 X 800像素,点击图片可放大图片; 调用ID: product_imgs',
'id' => 'product_imgs',
'type' => 'file_list',
'preview_size' => array( 100, 100 ),
// 'query_args' => array( 'type' => 'image' ), // Only images attachment
// Optional, override default text strings
'text' => array(
'add_upload_files_text' => '添加产品图片',
'remove_image_text' => '删除图片',
'file_text' => '文件:',
'file_download_text' => '下载文件',
'remove_text' => '删除',
),
//'after_row'=>'</div>'
) );
// 产品缩略图 设置 开始
// 产品 全屏图文展示 方案一 设置 开始
$index_group_01 = $post_metabox->add_field( array(
//'before_row'=>'<div id="product_parameter_div"> <div class="cmb-row-2">',
'id' => 'index01_fliter_group',
'type' => 'group',
'show_on_cb' => function( $cmb ) { $status = heku_get_option( 'template_main', 'fliter_group2' ); return '1' === '1'; },
'options' => array(
'group_title' => __( '筛选{#}', 'heku' ), // since version 1.1.4, {#} gets replaced by row number
'add_button' => __( '添加新 Banner 图片', 'heku' ),
'remove_button' => __( '删除 Banner 图片', 'heku' ),
'sortable' => true,
'closed' => true, // true to have the groups closed by default
'remove_confirm' => __( '确定要删除这个筛选吗?', 'heku' ), // Performs confirmation before removing group.
),
'description' => sprintf( __( ' Banner 轮播图片 + 轮播排版格式 <p> 注意拖动时候,列表第一个的排序修改是无效的,无法保存,请展开,使用内置的下移按钮修改排序。 %s </p>', 'heku' ),'<span class="heku-debug"> 分组ID:<code> index01_fliter_group </code> </span> ' ),
'after_group'=>'</div>',
));
$post_metabox->add_group_field( $index_group_01 ,array(
'name' => sprintf(__(' 图文展示的简称 %s','heku'),'<span class="red">(必填)</span>'),
'id' => 'title',
'type' => 'text',
'desc' => __('给这个图文展示起个名字','heku'),
'attributes' => array(
'required' => 'required',
),
));
$slider = apply_filters('b2_admin_index_mudules_slider_settings', array(
'options'=>array(
'product_introduction' => __('产品简介 图文排版 product_introduction','heku'),
'product_parameters' => __('产品简介 图文排版 product_parameters','heku'),
'single_banner-3' => __('单页 Banner 图片 新闻','heku'),
'single_banner-4' => __('单页小 Banner 图片','heku'),
),
'images' => array(
'product_introduction' => '/Assets/admin/images/index-group/product_introduction.png',
'product_parameters' => '/Assets/admin/images/index-group/product_parameters.png',
'single_banner-3' => '/Assets/admin/images/slider-4.svg',
'single_banner-4' => '/Assets/admin/images/slider-5.svg',
)
));
$post_metabox->add_group_field( $index_group_01, array(
'name' => __( '全屏 图文展示的样式 ', 'heku' ),
'id' => 'slider_type',
'type' => 'radio_image',
'classes' => 'model-picked',
'options' => $slider['options'],
'images_path' => HEKU_THEME_URI,
'images' => $slider['images'],
'default' => 'slider-1'
));
$post_metabox->add_group_field( $index_group_01,array(
'before_row'=>'<div class="cmb-row ">',
'name'=>'图文 主标题 【a】',
'id'=>'index_title_a',
'type' => 'text',
'default' => '',
'desc'=>__('根据 Banner 图片的轮播样式,具体调用展示不同数量的文字1。<span class="heku-debug"> 字段ID:<code> index_title_a </code> </span>', 'heku'),
'after_row'=>'</div>',
));
$post_metabox->add_group_field( $index_group_01,array(
'before_row'=>'<div class="cmb-row ">',
'name'=>' 图文 副标题或描述 【b】',
'id'=>'index_title_b',
'type' => 'text',
'default' => '',
'desc'=>__('根据 Banner 图片的轮播样式,具体调用展示不同数量的文字1。<span class="heku-debug"> 字段ID:<code> index_title_b </code> </span>', 'heku'),
'after_row'=>'</div>',
));
$post_metabox->add_group_field( $index_group_01, array(
'before_row'=>'<div class="product_introduction-module cmb-row set-hidden">',
'name' => __( '前景图片(产品', 'heku' ),
'desc' => __( '某些 展示样式下使用,建议使用<code> image/png </code> 的透明图片,以适应展示需求。<span class="heku-debug"> 字段ID:<code> index_primg1 </code> </span>', 'heku' ),
'id' => 'index_primg1',
'type' => 'file',
'options' => array(
'url' => true,
),
'text' => array(
'add_upload_file_text' => __( '选择 Banner 图片', 'b2' ),
),
'query_args' => array(
'type' => array(
'image/svg+xml',
'image/gif',
'image/jpeg',
'image/png',
),
),
'after_row'=>'</div>',
));
// 富文本 文字简单聚合 开始
$post_metabox->add_group_field( $index_group_01, array(
'before_row'=>'<div class="product_introduction-module product_parameters-module cmb-row set-hidden">',
'name' => '富文本 文字简单聚合【c】',
'desc' => 'div 标签 中可以保存class 类名,配合展示css需要,保存前需要预览,防止出现排版错误。<span class="heku-debug"> 字段ID:<code> index_textarea_c </code> </span>',
'id' => 'index_textarea_c',
'type' => 'wysiwyg',
'options' => array(
'wpautop' => false, // use wpautop?
'media_buttons' => true, // show insert/upload button(s)
'tabindex' => '',
'editor_css' => '', // intended for extra styles for both visual and HTML editors buttons, needs to include the `<style>` tags, can use "scoped".
'editor_class' => '', // add extra class(es) to the editor textarea
'teeny' => false, // output the minimal editor config used in Press This
'dfw' => false, // replace the default fullscreen with DFW (needs specific css)
'tinymce' => array(
'options' => 'menubar,advlist,menubar_block,merge_toolbars',
'toolbar_1' => 'formatselect',
'toolbar_2' => ' ',
'toolbar_3' => '',
'toolbar_4' => '',
//'toolbar_classic_block' => 'formatselect,bold,italic,blockquote,bullist,numlist,alignleft,aligncenter,link,forecolor,backcolor,table',
//'toolbar_block' => 'core/bold,core/italic,core/link,tadv/removeformat',
'toolbar_block_side' => 'core/code,tadv/mark,tadv/sup,tadv/sub',
'panels_block' => 'tadv/color-panel,tadv/background-color-panel',
), // load TinyMCE, can be used to pass settings directly to TinyMCE using an array()
'quicktags' => true // load Quicktags, can be used to pass settings directly to Quicktags using an array()
),
'after_row'=>'</div>',
));
// 富文本 文字简单聚合 结束
$post_metabox->add_group_field( $index_group_01, array(
'before_row'=>'<div class="news_banner-1-module cmb-row set-hidden">',
'name' => '模块的整体背景(颜色)',
'id' => 'index_bg_color',
'type' => 'colorpicker',
'default' => '#ffffff',
'options' => array(
'alpha' => true,
),
'after_row'=>'</div>',
));
$post_metabox->add_group_field( $index_group_01, array(
'before_row'=>'<div class="news_banner-1-module cmb-row set-hidden">',
'name' => __( 'Banner 背景(图片)', 'heku' ),
'id' => 'banner_bg_img',
'type' => 'file',
'options' => array(
'url' => true,
),
'text' => array(
'add_upload_file_text' => __( '选择 Banner 图片', 'heku' ),
),
'query_args' => array(
'type' => array(
'image/svg+xml',
'image/gif',
'image/jpeg',
'image/png',
),
),
'desc' => sprintf(__( ' Banner 图片或是背景,建议使用 %s 格式的图片,以适应高分辨率屏幕。%s ', 'heku' ),'<code>.svg</code>','<span class="heku-debug"> 字段ID:<code> banner_bg_img </code> </span> '),
'after_row'=>'</div>',
));
$post_metabox->add_group_field( $index_group_01, array(
'before_row'=>'<div class="news_banner-1-module cmb-row set-hidden">',
'name' => __( 'Banner 背景(视频)', 'heku' ),
'id' => 'banner_bg_video',
'type' => 'file',
'options' => array(
'url' => true,
),
'text' => array(
'add_upload_file_text' => __( '选择 Banner 图片', 'heku' ),
),
'query_args' => array(
'type' => array(
'image/svg+xml',
'image/gif',
'image/jpeg',
'image/png',
),
),
'desc' => sprintf(__( ' Banner 图片或是背景,建议使用 %s 格式的图片,以适应高分辨率屏幕。%s ', 'heku' ),'<code>.svg</code>','<span class="heku-debug"> 字段ID:<code> banner_bg_video </code> </span> '),
'after_row'=>'</div>',
));
// 产品 全屏图文展示 方案一 设置 结束
$post_parameter_metabox = new_cmb2_box(array(
'id' => 'post_after_editor_metabox',
'object_types' => array( 'post'),
'context' => 'after_editor',
'remove_box_wrap' => true,
));
// 产品额外参数 设置 开始
// 产品单独 Banner 设置 开始
$post_parameter_metabox->add_field( array(
'before_row'=>'<div id="product_parameter_div"> <div class="cmb-row-2">',
'name' => __( '产品简称(用于列表调用)', 'heku' ),
'id' => 'product_small_title',
'desc'=> __( '建议少于12个字符,留空则调用标题,调用ID:product_small_title', 'heku' ),
'type' => 'text',
) );
$post_parameter_metabox->add_field( array(
'name' => __( '产品型号', 'heku' ),
'id' => 'product_model',
'desc'=> __( '可以填写多个系列型号用 "," 分开,调用ID:product_model', 'heku' ),
'type' => 'text',
'after_row'=>'</div>'
) );
$banner_group = $post_parameter_metabox->add_field( array(
//'before_row'=>'<div id="product_parameter_div"> <div class="cmb-row-2">',
'id' => 'banner_fliter_group',
'type' => 'group',
'show_on_cb' => function( $cmb ) { $status = heku_get_option( 'template_main', 'fliter_group2' ); return '1' === '1'; },
'options' => array(
'group_title' => __( '筛选{#}', 'b2' ), // since version 1.1.4, {#} gets replaced by row number
'add_button' => __( '添加新 Banner 图片', 'b2' ),
'remove_button' => __( '删除 Banner 图片', 'b2' ),
'sortable' => true,
'closed' => true, // true to have the groups closed by default
'remove_confirm' => __( '确定要删除这个筛选吗?', 'b2' ), // Performs confirmation before removing group.
),
'description' => sprintf( __( ' Banner 轮播图片 + 轮播排版格式 <p> 注意拖动时候,列表第一个的排序修改是无效的,无法保存,请展开,使用内置的下移按钮修改排序。 %s </p>', 'b2' ),'<span class="heku-debug"> 分组ID:<code> banner_fliter_group </code> </span> ' ),
// 'after_group'=>'</div>',
));
$post_parameter_metabox->add_group_field( $banner_group ,array(
'name' => sprintf(__(' Banner 图的简称 %s','b2'),'<span class="red">(必填)</span>'),
'id' => 'title',
'type' => 'text',
'desc' => __('给这个筛选起个名字','b2'),
'attributes' => array(
'required' => 'required',
),
));
$slider = apply_filters('b2_admin_index_mudules_slider_settings', array(
'options'=>array(
//'slider-1' => __('大幻灯','b2'),
//'slider-2' => __('小幻灯1','b2'),
'single_banner-1' => __('单页 Banner 图片 产品','heku'),
'single_banner-2' => __('单页 Banner 图片 新闻','heku'),
'single_banner-3' => __('单页 Banner 图片 新闻','heku'),
'product_banner-none' => __('单页小 Banner 图片 product_banner-none','heku'),
),
'images' => array(
//'slider-1' => '/Assets/admin/images/slider-1.svg',
'single_banner-1' => '/Assets/admin/images/slider-2.svg',
'single_banner-2' => '/Assets/admin/images/slider-3.svg',
'single_banner-3' => '/Assets/admin/images/slider-4.svg',
'product_banner-none' => '/Assets/admin/images/slider-5.svg',
)
));
$post_parameter_metabox->add_group_field( $banner_group, array(
'name' => __( ' Banner 轮播图的样式 ', 'b2' ),
'id' => 'slider_type',
'type' => 'radio_image',
'classes' => 'model-picked',
'options' => $slider['options'],
'images_path' => HEKU_THEME_URI,
'images' => $slider['images'],
'default' => 'slider-1'
));
$post_parameter_metabox->add_group_field($banner_group,array(
'before_row'=>'<div class="cmb-row ">',
'name'=>'Banner 主标题',
'id'=>'banner_title1',
'type' => 'text',
'default' => '',
'desc'=>__('根据 Banner 图片的轮播样式,具体调用展示不同数量的文字1。<span class="heku-debug"> 字段ID:<code> banner_title1 </code> </span>', 'heku'),
'after_row'=>'</div>',
));
$post_parameter_metabox->add_group_field($banner_group,array(
'before_row'=>'<div class="cmb-row ">',
'name'=>' Banner 副标题或描述',
'id'=>'banner_title2',
'type' => 'text',
'default' => '',
'desc'=>__('根据 Banner 图片的轮播样式,具体调用展示不同数量的文字1。<span class="heku-debug"> 字段ID:<code> banner_title2 </code> </span>', 'heku'),
'after_row'=>'</div>',
));
$post_parameter_metabox->add_group_field( $banner_group, array(
'before_row'=>'<div class="news_banner-1-module cmb-row set-hidden">',
'name' => __( 'Banner 前景图片(产品', 'heku' ),
'desc' => __( '某些 展示样式下使用,建议使用<code> image/png </code> 的透明图片,以适应展示需求。<span class="heku-debug"> 字段ID:<code> banner_primg1 </code> </span>', 'heku' ),
'id' => 'banner_primg1',
'type' => 'file',
'options' => array(
'url' => true,
),
'text' => array(
'add_upload_file_text' => __( '选择 Banner 图片', 'b2' ),
),
'query_args' => array(
'type' => array(
'image/svg+xml',
'image/gif',
'image/jpeg',
'image/png',
),
),
'after_row'=>'</div>',
));
$post_parameter_metabox->add_group_field( $banner_group, array(
'before_row'=>'<div class="cmb-row">',
'name' => __( 'Banner 背景(图片)', 'heku' ),
'id' => 'banner_bg_img',
'type' => 'file',
'options' => array(
'url' => true,
),
'text' => array(
'add_upload_file_text' => __( '选择 Banner 图片', 'heku' ),
),
'query_args' => array(
'type' => array(
'image/svg+xml',
'image/gif',
'image/jpeg',
'image/png',
),
),
'desc' => sprintf(__( ' Banner 图片或是背景,建议使用 %s 格式的图片,以适应高分辨率屏幕。%s ', 'heku' ),'<code>.svg</code>','<span class="heku-debug"> 字段ID:<code> banner_bg_img </code> </span> '),
'after_row'=>'</div>',
));
$post_parameter_metabox->add_group_field( $banner_group, array(
'before_row'=>'<div class="cmb-row ">',
'name' => __( 'Banner 背景(视频)', 'heku' ),
'id' => 'banner_bg_video',
'type' => 'file',
'options' => array(
'url' => true,
),
'text' => array(
'add_upload_file_text' => __( '选择 Banner 图片', 'heku' ),
),
'query_args' => array(
'type' => array(
'image/svg+xml',
'image/gif',
'image/jpeg',
'image/png',
),
),
'desc' => sprintf(__( ' Banner 图片或是背景,建议使用 %s 格式的图片,以适应高分辨率屏幕。%s ', 'heku' ),'<code>.svg</code>','<span class="heku-debug"> 字段ID:<code> banner_bg_video </code> </span> '),
'after_row'=>'</div>',
));
// 产品单独 Banner 设置 结束
// 首页产品宣传参数 开始
$post_parameter_metabox->add_field( array(
'name' => '首页产品宣传参数',
'desc' => '产品参数,最好以列表形式保存,建议在3-4条,没条字数不要超过30个字符。保存前需要预览,防止出现排版错误。',
'id' => 'home_parameters',
'type' => 'wysiwyg',
'options' => array(
'wpautop' => false, // use wpautop?
'media_buttons' => true, // show insert/upload button(s)
'tabindex' => '',
'editor_css' => '', // intended for extra styles for both visual and HTML editors buttons, needs to include the `<style>` tags, can use "scoped".
'editor_class' => '', // add extra class(es) to the editor textarea
'teeny' => false, // output the minimal editor config used in Press This
'dfw' => false, // replace the default fullscreen with DFW (needs specific css)
'tinymce' => array(
'options' => 'menubar,advlist,menubar_block,merge_toolbars',
'toolbar_1' => 'formatselect',
'toolbar_2' => ' ',
'toolbar_3' => '',
'toolbar_4' => '',
'toolbar_classic_block' => 'formatselect,bold,italic,blockquote,bullist,numlist,alignleft,aligncenter,alignright,link,forecolor,backcolor,table,wp_help',
'toolbar_block' => 'core/bold,core/italic,core/link,tadv/removeformat',
'toolbar_block_side' => 'core/code,tadv/mark,tadv/sup,tadv/sub',
'panels_block' => 'tadv/color-panel,tadv/background-color-panel',
), // load TinyMCE, can be used to pass settings directly to TinyMCE using an array()
'quicktags' => true // load Quicktags, can be used to pass settings directly to Quicktags using an array()
),
'after_row'=>'</div>',
) );
// 首页产品宣传参数 开始
// 产品额外参数 设置 结束
}
public function edit_form_after_title() {
global $post_type;
if( 'post' === $post_type ): ?>
<ul class="edit-detail-tabs">
<li class="product_div current"><?php echo get_post_type_object($post_type)->labels->singular_name; ?>信息上传</li>
<li class="product_parameter">显示额外参数</li>
<li class="tag_seo">SEO参数设置</li>
</ul>
<?php endif;
}
public function edit_form_after_editor() {
global $post_type;
if( 'post' === $post_type ): ?>
<div id="product_div_show"></div>
<div id="product_parameter_show"></div>
<div id="tag_seo_show"></div>
<style type="text/css">
.wp-editor-expand #post-status-info{border: 0px solid #c3c4c7;box-shadow: 2px 4px 4px rgba(0,0,0,0.1);border-bottom-left-radius: 8px;border-bottom-right-radius: 8px;}
#wp-word-count {padding: 8px 10px;}
#post-status-info td {font-size: 13px;}
div.mce-toolbar-grp{padding: 1px;}
div.mce-toolbar-grp>div {padding: 4px 10px;}
.wp-editor-expand #wp-content-editor-container{box-shadow: 2px 2px 4px rgba(0,0,0,0.1);border-right: 0px solid #dcdcde;border-left: 0px solid #dcdcde;}
.wp-editor-expand #wp-content-editor-tools{box-shadow: 2px 0px 4px rgba(0,0,0,0.1);}
.wp-editor-tabs{padding-right: 20px;}
#cmb2-metabox-post_after_title_metabox{border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;}
#post-body-content #cmb2-metabox-post_after_editor_metabox.cmb2-metabox{padding: 0;}
#product_parameter_div{padding: 1.5em 2em;}
#post_after_title_metabox{margin-bottom: -60px;}
#product_img_div{margin-bottom: 60px;}
.focus-on .wp-header-end{display: none;}
.cmb2-context-wrap {margin-top: 20px;}
.cmb2-context-wrap.cmb2-context-wrap-after_title{margin-top: 0px;}
.cmb2-context-wrap #cmb2-metabox-post_after_title_metabox .cmb-type-group > .cmb-td{width:100%}
.cmb2-context-wrap .cmb-td{width:100%}
.mce-toolbar .mce-btn-group .mce-btn.mce-wp-dfw{margin: 10px 15px 0 0;}
#postbox-container-1 .postbox {border: 0px solid #c3c4c7; box-shadow: 2px 4px 4px rgba(0,0,0,0.1);}
#titlediv #title{border: 0px solid #8c8f94;height: 2em;padding: 3px 15px;box-shadow: 2px 4px 4px rgba(0,0,0,0.1);border-radius: 8px;}
#submitdiv.postbox, .postbox{ border-radius: 8px;}
.edit-detail-tabs:after{content: "";display: block;clear: both;visibility: hidden;height: 0;}
.edit-detail-tabs{height: 36px;line-height: 35px;border-bottom: 1px solid #6f6f6f;font-size: 16px;margin: 10px auto 0px;}
.edit-detail-tabs li{float: left;padding: 0 15px;background: #6f6f6f;border-radius: 8px 8px 0 0;font-size: 12px;margin: 0 20px -2px 0;position: relative;z-index: 22;cursor: pointer;}
.edit-detail-tabs li,.edit-detail-tabs li a{color: #fff;}
.edit-detail-tabs li.current{background: #42586f;}
.edit-detail-tabs li.current,.edit-detail-tabs li.current a{color: #fff;}
#insert-media-button{margin:-6px 6px}
#aiosp .handlediv,#aiosp h2,#aio-pro-update{display: none;}
#aiosp .aioseop_wrapper{padding: 10px 13px 0;}
#aiosp .inside{padding: 0 30px 12px;}
#aiosp { margin-bottom:0px ;}
#aiosp .aioseop_option_label ,#aiosp .aioseop_label { line-height: 35px; }
#aiosp_noindex_wrapper,#aiosp_nofollow_wrapper,#aiosp_disable_wrapper{display: none;}
.postbox-container div#aiosp_upgrade_wrapper .aioseop_input .aioseop_option_input .aioseop_option_div{padding:0}
.edit-detail-panel-hide{display: none;}
</style>
<script>jQuery(document).ready(function($){
$('#product_parameter_show').addClass('edit-detail-panel-hide')
$('#product_parameter_div').addClass('edit-detail-panel-hide')
$('.edit-detail-tabs li').click(function() {
$(this).addClass('current').siblings().removeClass('current')
$('#product_div_show,#product_parameter_show,#tag_seo_show,#postdivrich,#product_img_div,#product_parameter_div').addClass('edit-detail-panel-hide')
var activeClass = $(this).attr('class').split(" ")[0]
var activeCont = '#' + activeClass + '_show'
$(activeCont).removeClass('edit-detail-panel-hide')
})
$('.product_div').click(function() {
$('#tag_seo_show').removeClass('edit-detail-panel-hide')
$('#postdivrich').removeClass('edit-detail-panel-hide')
$('#product_img_div').removeClass('edit-detail-panel-hide')
$(window).scrollTop(100)
})
$('.product_parameter').click(function(){
$('#product_parameter_div').removeClass('edit-detail-panel-hide')
})
$('#aiosp').appendTo('#tag_seo_show')
$('#tagsdiv-post_tag').appendTo('#tag_seo_keywords')
})</script>
<?php endif;
}
}