扩展WordPress-Plugin-Boilerplate插件中的类

时间:2017-12-01 09:59:19

标签: wordpress class extend boilerplate

有谁知道如何正确扩展此WP样板插件中的主管理类?

简化代码:

管理员/类插件名称-admin.php的

class Plugin_Name_Admin { ... }

(自定义)扩展类: 管理员/类插件名称管理员-custom.php

if ( ! defined( 'ABSPATH' ) ) exit;

    if( ! class_exists('Plugin_Name_Admin') ) {
        require_once plugin_dir_path( dirname( __FILE__ ) ) . 'admin/class-plugin-name-admin.php';
    }

class Plugin_Name_Admin_Fields extends Plugin_Name_Admin {

// as a test I simply added an admin link
public function books_register_ref_page() {
    add_submenu_page(
        'edit.php?post_type=books',
        __( 'Books Shortcode Reference', 'textdomain' ),
        __( 'Shortcode Reference', 'textdomain' ),
        'manage_options',
        'books-shortcode-ref',
        'books_ref_page_callback'
    );
}

}
$fields = new Plugin_Name_Admin_Fields();

然后在里面 包括/类插件-name.php

我希望我可以使用以下钩子

$plugin_admin = new Plugin_Name_Admin( $this->get_plugin_name(), $this->get_version() );

$this->loader->add_action( 'admin_menu', $plugin_admin, 'books_register_ref_page' );

但我得到了一些错误

call_user_func_array() expects parameter 1 to be a valid callback, class 'Plugin_Name_Admin' does not have a method 'books_register_ref_page' in...

我知道我可以通过使用它来解决这个问题:

$plugin_extended = new Plugin_Name_Admin_Fields( $this->get_plugin_name(), $this->get_version() );

$this->loader->add_action( 'admin_menu', $plugin_extended, 'books_register_ref_page' );

问题是,我是否正确理解"Class X extend Main Class"?我的目标是不在

中创建一个长文件代码
class Plugin_Name_Admin { ... }

相反,我想将一些特定代码放在扩展Plugin_Name_Admin类的不同类中。

如果我在主类(Plugin_Name_Admin)中有一个需要扩展类中的代码的函数,它应该开箱即用,而不首先重新定义扩展类。否则使用“Class X extend Main Class”?

0 个答案:

没有答案