How to extend WordPress Bookly plugin

After several long hours of research, I’ve come to the conclusion that there are but two options:

1) Get the developers to create do the job (unfeasable);

2) Edit the plugin and change the name and source URL to prevent any updates from happening.

Against all my convictions, I went with option #2. I will be closing this question but leaving this note as a reference for anyone who wishes to do something similar.

I need to extend the “Bookly” plugin and customize it with a few custom functionalities and edit some of the existing functionalities. I’ve never worked with OO PHP, not namespaces, but I have been reading a lot about it since starting this project.

As of right now, I (somehow) managed to edit some of the code to create new columns in the database and add data, however I cannot retrieve them.

  1. I’ve logged every hook related to the plugin in order to trace where the loading occurs, all the way back to the add_action hook;
  2. I’ve double-, triple-, and quadruple-checked every place through the original plugin and pinpointed which function I needed to edit;
  3. I’ve created a new file calling the namespace and everything just like the original plugin (making sure I avoided duplicate class names and extended the original), but it’s not being called. This is where I’m getting annoyed since I can get data to be added but not fetched using the same techniques.

When I worked on adding columns, it took a while, but it’s now working no trouble. However, AJAX hooks are added dynamically, like so:

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 );
                    }
                }
            }
        }
    }

Before the add_action( $prefix . $action, $function ); line, I’ve added a wp_die( $prefix . $action ); if this was equal to wp_ajax_bookly_get_customers, which is the hook called when loading the data from the database. However, I cannot load the additional columns and their data despite because I cannot seem to extend the plugin before I can load the data from the database.

Leave a Comment