如何扩展WordPress Bookly插件

时间:2018-03-08 14:35:46

标签: javascript php ajax wordpress plugins

  

经过长时间的研究,我得出的结论是,只有两种选择:

     

1)让开发人员创建工作(不可行);

     

2)编辑插件并更改名称和源URL以防止发生任何更新。

     

在我的所有信念中,我选择了#2选项。我将结束这个问题,但留下这个说明作为任何希望做类似事情的人的参考。

我需要扩展" Bookly"插件并使用一些自定义功能对其进行自定义,并编辑一些现有功能。我从未使用过OO PHP,而不是命名空间,但自从开始这个项目以来,我一直在阅读它。

截至目前,我(不知何故)设法编辑了一些代码以在数据库中创建新列并添加数据,但我无法检索它们。

  1. 我已经记录了与插件相关的每个钩子,以便跟踪加载发生的位置,一直回到add_action钩子;
  2. 我通过原始插件对每个地方进行了双重,三重和四重检查,并确定了我需要编辑的功能;
  3. 我创建了一个调用命名空间的新文件,就像原始插件一样(确保我避免重复的类名并扩展原始版本),但它没有被调用。这是我感到烦恼的地方,因为我可以添加数据但不能使用相同的技术获取数据。
  4. 当我致力于添加专栏时,花了一段时间,但它现在没有遇到麻烦。但是,AJAX钩子是动态添加的,如下所示:

    protected function registerWpAjaxActions( $with_nopriv = false )
        {
            if ( defined( 'DOING_AJAX' ) ) {
                $plugin_class = Lib\Base\Plugin::getPluginFor( $this );
    
                // Prefixes for auto generated add_action() $tag parameter.
                $prefix = sprintf( 'wp_ajax_%s', $plugin_class::getPrefix() );
                if ( $with_nopriv ) {
                    $nopriv_prefix = sprintf( 'wp_ajax_nopriv_%s', $plugin_class::getPrefix() );
                }
    
                $_this = $this;
    
                foreach ( $this->reflection->getMethods( \ReflectionMethod::IS_PUBLIC ) as $method ) {
                    if ( preg_match( '/^execute(.*)/', $method->name, $match ) ) {
                        $action   = strtolower( preg_replace( '/([a-z])([A-Z])/', '$1_$2', $match[1] ) );
                        $function = function () use ( $_this, $match ) {
                            $_this->forward( $match[0], true, true );
    
                        add_action( $prefix . $action, $function );
                        if ( $with_nopriv ) {
                            add_action( $nopriv_prefix . $action, $function );
                        }
                    }
                }
            }
        }
    

    add_action( $prefix . $action, $function );行之前,如果这等于wp_die( $prefix . $action );,我就添加了wp_ajax_bookly_get_customers,这是从数据库加载数据时调用的挂钩。但是,我无法加载其他列及其数据,尽管因为在我从数据库加载数据之前似乎无法扩展插件。

0 个答案:

没有答案