Php 将一个插件的子类扩展到另一个插件

Php 将一个插件的子类扩展到另一个插件,php,function,class,overriding,extend,Php,Function,Class,Overriding,Extend,我正在使用[插件:可视化工具:图表和图形] 在这个插件中有一个类 class Visualizer_Module_Frontend extends Visualizer_Module { const NAME = __CLASS__; private $_charts = array(); public function __construct( Visualizer_Plugin $plugin ) { parent::__construct( $plugin ); $

我正在使用[插件:可视化工具:图表和图形] 在这个插件中有一个类 class Visualizer_Module_Frontend extends Visualizer_Module {

const NAME = __CLASS__;

private $_charts = array();

public function __construct( Visualizer_Plugin $plugin ) {
    parent::__construct( $plugin );

    $this->_addAction( 'wp_enqueue_scripts', 'enqueueScripts' );
    $this->_addShortcode( 'visualizer', 'renderChart' );

    // add do_shortocde hook for widget_text filter
    if ( !has_filter( 'widget_text', 'do_shortcode' ) ) {
        add_filter( 'widget_text', 'do_shortcode' );
    }

    // add do_shortcode hook for term_description filter
    if ( !has_filter( 'term_description', 'do_shortcode' ) ) {
        add_filter( 'term_description', 'do_shortcode' );
    }
}


public function enqueueScripts() {
    wp_register_script( 'visualizer-google-jsapi', '//www.google.com/jsapi', array(), null, true );
    wp_register_script( 'visualizer-render', VISUALIZER_ABSURL . 'js/render.js', array( 'visualizer-google-jsapi', 'jquery' ), Visualizer_Plugin::VERSION, true );
}


public function renderChart( $atts ) {
    $atts = shortcode_atts( array(
        'id'     => false, // chart id
        'class'  => false, // chart class
        'series' => false, // series filter hook            
        'data'   => false, // data filter hook          
        'settings'   => false, // data filter hook
    ), $atts );

    // if empty id or chart does not exists, then return empty string
    if ( !$atts['id'] || !( $chart = get_post( $atts['id'] ) ) || $chart->post_type != Visualizer_Plugin::CPT_VISUALIZER ) {
        return '';
    }

    $id = 'visualizer-' . $atts['id']; 
    $class = apply_filters( Visualizer_Plugin::FILTER_CHART_WRAPPER_CLASS, $atts['class'], $atts['id'] );
    $class = !empty( $class ) ? ' class="' . $class . '"' : '';

    $type = get_post_meta( $chart->ID, Visualizer_Plugin::CF_CHART_TYPE, true );

    // faetch and update settings
    $settings = get_post_meta( $chart->ID, Visualizer_Plugin::CF_SETTINGS, true );
    if ( empty( $settings['height'] ) ) {
        $settings['height'] = '400';
    }

    // handle series filter hooks
    $series = apply_filters( Visualizer_Plugin::FILTER_GET_CHART_SERIES, get_post_meta( $chart->ID, Visualizer_Plugin::CF_SERIES, true ), $chart->ID, $type );
    if ( !empty( $atts['series'] ) ) {
        $series = apply_filters( $atts['series'], $series, $chart->ID, $type );         
    }
    // handle settings filter hooks
    $settings = apply_filters( Visualizer_Plugin::FILTER_GET_CHART_SETTINGS, $settings, $chart->ID, $type );
    if ( !empty( $atts['settings'] ) ) {
        $settings = apply_filters( $atts['settings'], $settings, $chart->ID, $type );
    }

    // handle data filter hooks
    $data = apply_filters( Visualizer_Plugin::FILTER_GET_CHART_DATA, unserialize( $chart->post_content ), $chart->ID, $type );
    if ( !empty( $atts['data'] ) ) {
        $data = apply_filters( $atts['data'], $data, $chart->ID, $type );
                }

    // add chart to the array
    $this->_charts[$id] = array(
        'type'     => $type,
        'series'   => $series,
        'settings' => $settings,
        'data'     => $data,
    );

    // enqueue visualizer render and update render localizations
    wp_enqueue_script( 'visualizer-render' );
    wp_localize_script( 'visualizer-render', 'visualizer', array( 'charts' => $this->_charts ) );

    return '<div id="' . $id . '"' . $class . '></div>';
} }
类Visualizer_模块\u前端扩展Visualizer_模块{

const NAME=\uuuuuu CLASS\uuuuuuuuu;
私有$_charts=array();
公共函数构造(可视化工具插件$Plugin){
父项::_构造($plugin);
$this->_addAction('wp_enqueue_scripts','enqueueScripts');
$this->_addShortcode('visualizer','renderChart');
//为widget\u文本过滤器添加do\u shortocde钩子
如果(!has_filter('widget_text','do_shortcode')){
添加_过滤器('widget_text','do_shortcode');
}
//为术语描述过滤器添加do_短代码钩子
如果(!has_filter('term_description','do_shortcode')){
添加_过滤器('term_description'、'do_shortcode');
}
}
公共函数排队脚本(){
wp_register_脚本('visualizer google jsapi','//www.google.com/jsapi',array(),null,true);
wp_register_脚本('visualizer render',visualizer ABSURL。'js/render.js',数组('visualizer google jsapi',jquery'),visualizer_Plugin::VERSION,true);
}
公共功能效果图(附件){
$atts=短码_atts(数组)(
'id'=>false,//图表id
'class'=>false,//图表类
'series'=>false,//series筛选器挂钩
'data'=>false,//数据筛选器挂钩
'settings'=>false,//数据筛选器挂钩
)(港币),;
//如果空id或图表不存在,则返回空字符串
如果(!$atts['id']| |!($chart=get_post($atts['id']))| |$chart->post_type!=可视化工具插件::CPT_可视化工具){
返回“”;
}
$id='visualizer-'。$atts['id'];
$class=apply_filters(可视化工具插件::FILTER_CHART_WRAPPER_class,$atts['class'],$atts['id']);
$class=!empty($class)?'class=“”.$class.”“:”;
$type=get\u post\u meta($chart->ID,Visualizer\u插件::CF\u chart\u type,true);
//faetch和更新设置
$settings=get\u post\u meta($chart->ID,可视化工具插件::CF\u settings,true);
if(空($settings['height'])){
$settings['height']='400';
}
//手柄系列过滤器挂钩
$series=apply_filters(可视化工具插件::FILTER_GET_CHART_series,GET_post_meta($CHART->ID,可视化工具插件::CF_series,true),$CHART->ID,$type);
如果(!空($atts['series'])){
$series=apply_过滤器($atts['series'],$series,$chart->ID,$type);
}
//句柄设置过滤器挂钩
$settings=apply\u过滤器(可视化工具插件::过滤器\u获取\u图表\u设置,$settings,$CHART->ID,$type);
如果(!empty($atts['settings'])){
$settings=apply_过滤器($atts['settings'],$settings,$chart->ID,$type);
}
//句柄数据过滤器挂钩
$data=apply_filters(可视化工具插件::FILTER_GET_CHART_data,取消序列化($CHART->post_内容),$CHART->ID,$type);
如果(!空($atts['data'])){
$data=apply_过滤器($atts['data'],$data,$chart->ID,$type);
}
//将图表添加到数组中
$this->\u图表[$id]=数组(
'type'=>$type,
“系列”=>$series,
“设置”=>$settings,
“数据”=>$data,
);
//排队可视化工具渲染和更新渲染本地化
wp_排队_脚本(“可视化工具渲染”);
wp_本地化_脚本('visualizer render','visualizer',数组('charts'=>$this->_charts));
返回“”;
} }
我想扩展这个类,以便重写函数renderChart()。
但是我想用另一个自定义插件来实现这一点。

我不想在[plugin:Visualizer:Charts and graph]中进行任何编辑。无论做什么都应该在另一个自定义插件中。我不想在[plugin:Visualizer:Charts and graph]中进行任何编辑。无论做什么,都应该在另一个自定义插件中。