HEX
Server: nginx/1.28.1
System: Linux iZgw8b5bpgd4jyptfmmmxgZ 6.6.102-5.2.alnx4.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Nov 27 23:11:10 CST 2025 x86_64
User: www (1000)
PHP: 8.2.28
Disabled: passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv
Upload Files
File: /www/wwwroot/www.scdc-marine.com/wp-content/themes/heku-cms/HekuClass/Admin/Cmb2Page.php
<?php

namespace Heku\HekuClass\Admin;

/**
 * @package     Heku\HekuClass\Admin
 * @subpackage  Classes/Cmb2Page
 * @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 Cmb2Page {

    /** 
     * 类实现单例模式,类的独生子女
     */
    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() {
        // 添加 Cmb2 的过滤器 slug 设置方式:'key' => 'slug', 'value' => array( 'contact','sss' )
        add_filter( 'cmb2_show_on', array( $this, 'be_metabox_show_on_slug' ), 10, 2 );

        add_action( 'cmb2_admin_init', array($this,'cmb2_page_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' ) );

    }


    /**
     * Metabox for Page Slug
     * @author Tom Morton
     * @link https://github.com/CMB2/CMB2/wiki/Adding-your-own-show_on-filters
     *
     * @param bool $display
     * @param array $meta_box
     * @return bool display metabox
     */
    function be_metabox_show_on_slug( $display, $meta_box ) {
        if ( ! isset( $meta_box['show_on']['key'], $meta_box['show_on']['value'] ) ) {
            return $display;
        }

        if ( 'slug' !== $meta_box['show_on']['key'] ) {
            return $display;
        }

        $post_id = 0;

        // If we're showing it based on ID, get the current ID
        if ( isset( $_GET['post'] ) ) {
            $post_id = $_GET['post'];
        } elseif ( isset( $_POST['post_ID'] ) ) {
            $post_id = $_POST['post_ID'];
        }

        if ( ! $post_id ) {
            return $display;
        }

        $slug = get_post( $post_id )->post_name;

        // See if there's a match
        return in_array( $slug, (array) $meta_box['show_on']['value']);
    }


    public function cmb2_page_metabox() {
     
        // Page Banner 设置

            $page_metabox = new_cmb2_box(array( 
                'id'            => 'page_after_title_metabox',
                'option_key'    => 'heku_post_main',
                'object_types'  => array( 'page'), // Post type
                //'show_on' => array( 'key' => 'slug', 'value' =>  array( 'contact','solution','about','electric-power')  ),
                'context'       => 'after_title',
                'remove_box_wrap' => true, // 省略“title”属性,改为添加“remove_box_wrap”=>true,这样就没有 Metabox
            ));

            $banner_group = $page_metabox->add_field( array(
                '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'       => __( '筛选{#}', '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>', 'b2' ),'<span class="heku-debug"> 分组ID:<code> banner_fliter_group </code> </span> ' ),
                // 'after_group'=>'</div>',
            ));

            $page_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'), 
                    'contact_banner-1' => __('单页小 Banner 图片 新闻 contact_banner-1','heku'), 
                    'solution-banner-1' => __('Solution 解决方案 solution-banner-1','heku'),
                    'solution-banner-2' => __('Solution 解决方案 solution-banner-2','heku'), 
                    'solution-banner-3' => __('Solution 解决方案 solution-banner-3','heku'),
                ),
                'images'       => array(
                    //'slider-1' => '/Assets/admin/images/slider-1.svg',
                    'contact_banner-1' => '/Assets/admin/images/slider-2.svg',
                    'solution-banner-1' => '/Assets/admin/images/banner/solution-banner-1.png',
                    'solution-banner-2' => '/Assets/admin/images/slider-4.svg',
                    'solution-banner-3' => '/Assets/admin/images/slider-5.svg',
                )
            )); 

            // Banner 轮播图的样式
            $page_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'
            ));
            // Banner 轮播图的样式 结束

            $page_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>',
            ));
            $page_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>',
            ));
            

            $page_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>',
            ));

            $page_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>',
            ));

            $page_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>',
            ));

        // Page Banner 设置

        // 单页 图文展示 方案一 设置 开始

            $page_after_metabox = new_cmb2_box(array( 
                'id'            => 'page_after_title_metabox2',
                'option_key'    => 'heku_page_metabox',
                'object_types'  => array( 'page'), // Post type
                //'show_on' => array( 'key' => 'slug', 'value' =>  array( 'contact','about','electric-power')  ),
                'context'       => 'after_title',
                'remove_box_wrap' => true, // 省略“title”属性,改为添加“remove_box_wrap”=>true,这样就没有 Metabox
            ));

            $display_group = $page_after_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>',
            ));

            $page_after_metabox->add_group_field( $display_group ,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(
                    'solution_1' => __('解决方案 图文排版 solution_1','heku'), 
                    'solution_2' => __('解决方案 图文排版 solution_2','heku'),
                    'solution_3' => __('解决方案 图文排版 solution_3','heku'), 
                    'solution_4' => __('解决方案 图文排版 solution_4','heku'),
                    'solution_5' => __('解决方案 图文排版 solution_5','heku'), 
                    'solution_6' => __('解决方案 图文排版 solution_6','heku'),
                ),
                'images'       => array(
                    'solution_1' => '/Assets/admin/images/index-group/solution_1.png',
                    'solution_2' => '/Assets/admin/images/index-group/solution_2.jpg',
                    'solution_3' => '/Assets/admin/images/index-group/solution_3.jpg',
                    'solution_4' => '/Assets/admin/images/index-group/solution_4.jpg',
                    'solution_5' => '/Assets/admin/images/index-group/solution_5.jpg',
                    'solution_6' => '/Assets/admin/images/index-group/solution_6.jpg',
                )
            )); 

            $page_after_metabox->add_group_field( $display_group, 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'
            ));

            $page_after_metabox->add_group_field( $display_group,array(
                'before_row'=>'<div class="cmb-row ">',
                'name'=>'图文 主标题 【a】',
                'id'=>'title_a',
                'type'    => 'text',
                'default' => '',
                'desc'=>__('根据 Banner 图片的轮播样式,具体调用展示不同数量的文字1。<span class="heku-debug"> 字段ID:<code> title_a </code> </span>', 'heku'),
                'after_row'=>'</div>',
            ));
            $page_after_metabox->add_group_field( $display_group,array(
                'before_row'=>'<div class="cmb-row ">',
                'name'=>' 图文 副标题或描述 【b】',
                'id'=>'title_b',
                'type'    => 'text',
                'default' => '',
                'desc'=>__('根据 Banner 图片的轮播样式,具体调用展示不同数量的文字1。<span class="heku-debug"> 字段ID:<code> title_b </code> </span>', 'heku'),
                'after_row'=>'</div>',
            ));
            
            $page_after_metabox->add_group_field( $display_group, array(
                'before_row'=>'<div class="solution_1-module solution_3-module solution_6-module cmb-row set-hidden">',
                'name'    => __( '前景图片(产品', 'heku' ),
                'desc'    => __( '某些 展示样式下使用,建议使用<code> image/png </code> 的透明图片,以适应展示需求。<span class="heku-debug"> 字段ID:<code> primg1 </code> </span>', 'heku' ),
                'id'      => '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>',
            ));

            // 富文本 文字简单聚合  开始

                $page_after_metabox->add_group_field( $display_group, array(
                    'before_row'=>'<div class="solution_1-module solution_2-module  solution_3-module solution_4-module solution_5-module solution_6-module product_parameters-module  cmb-row set-hidden">',
                    'name'    => '富文本 文字简单聚合【c】',
                    'desc'    => 'div 标签 中可以保存class 类名,配合展示css需要,保存前需要预览,防止出现排版错误。<span class="heku-debug"> 字段ID:<code> textarea_c </code> </span>',
                    'id'      => '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>',
                ));
        
            // 富文本 文字简单聚合   结束

            $page_after_metabox->add_group_field( $display_group, array(
                'before_row'=>'<div class="solution_1-module cmb-row set-hidden">',
                'name'    => '模块的整体背景(颜色)',
                'id'      => 'bg_color',
                'type'    => 'colorpicker',
                'default' => '#ffffff',
                'options' => array(
                    'alpha' => true,
                ),
                'after_row'=>'</div>',    
            ));

            $page_after_metabox->add_group_field( $display_group, array(
                'before_row'=>'<div class="solution_1-module cmb-row set-hidden">',
                'name'    => '模块的CSS Name(高度)',
                'id'      => 'class_name',
                'type'    => 'text',
                'default' => 'order-lg-first',
                'desc'=>__('根据 Banner 添加calss-name 这个是确定图片左还是右显示。<span class="heku-debug"> 字段ID:<code> class_name </code> </span>', 'heku'),
                'after_row'=>'</div>',    
            ));
            
            $page_after_metabox->add_group_field( $display_group, array(
                'before_row'=>'<div class="solution_1-module cmb-row set-hidden">',
                'name'    => '模块的CSS Name2(高度)',
                'id'      => 'class_name2',
                'type'    => 'text',
                'default' => 'pt-5 pb-4',
                'desc'=>__('根据 Banner 添加calss-name 这个是确定图片左还是右显示。<span class="heku-debug"> 字段ID:<code> class_name2 </code> </span>', 'heku'),
                'after_row'=>'</div>',    
            ));

            $page_after_metabox->add_group_field( $display_group, array(
                'before_row'=>'<div class="solution_1-module cmb-row set-hidden">',
                'name'    => '模块的整体CSS(高度)',
                'id'      => 'bg_height',
                'type'    => 'text',
                'default' => '30rem',
                'desc'=>__('根据 Banner 图片的轮播样式,具体调用展示不同数量的文字1。<span class="heku-debug"> 字段ID:<code> bg_height </code> </span>', 'heku'),
                'after_row'=>'</div>',    
            ));

        // 产品 图文展示 方案一 设置 结束



    }

    public function edit_form_after_title() { 
        global $post_type;
        if( 'page' === $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>

            <style type="text/css">
                #page_after_title_metabox{    margin-top: -10px;}
                .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;}
                #acf_15 .handlediv ,#acf_15 .hndle{ display: none;}
                .acf-tab-group { padding: 20px 8px 0 0;}
                .acf-tab-group li a{ border-top-left-radius: 10px; border-top-right-radius: 10px; padding: 6px 25px; }
                .acf_postbox.default .acf-tab-group { padding-left: 25px;}
                .acf_postbox.default .acf-tab-group li a{ background: #bed4ca;}
                #acf_15 .acf-tab-group li { margin: 0 12px 0 0}
                #acf_15{margin-bottom:7px}
                #postdivrich { margin-top: 0px;}
                #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}
                .cmb2-context-wrap .cmb-td{width:100%}
            </style>

            <script>jQuery(document).ready(function($){
                $('#product_parameter_show').hide()
                $('#product_div_show,#product_parameter_show,#tag_seo_show').addClass('edit-detail-panel')
                $('.edit-detail-tabs li').click(function() {
                    $(this).addClass('current').siblings().removeClass('current')
                    $('.edit-detail-panel').hide()
                    var activeClass = $(this).attr('class').split(" ")[0]
                    var activeCont = '#' + activeClass + '_show'
                    $(activeCont).show()
                })
                $('.product_div').click(function() {
                    $('#tag_seo_show').show()
                })
                $('#acf_15').appendTo('#product_div_show')
                $('#postdivrich').appendTo('#product_div_show')
                $('#acf_95').appendTo('#product_parameter_show')
                                        
                $('#aiosp').appendTo('#tag_seo_show')
                //$('#tagsdiv-post_tag').appendTo('#tag_seo_show')
            })</script>

        <?php endif;
    }

    public function edit_form_after_editor() { 
        global $post_type;

        if('page' === $post_type ):?>


        <?php endif;
    }

}