使我的wordpress插件可扩展

时间:2016-03-13 18:28:11

标签: php wordpress plugins

我写了一个wordpress插件。该插件添加了一个插件页面,该页面的顶部是其他页面的选项卡(选项卡将查询字符串添加到URL,具体取决于查询字符串取决于显示的选项)。

我现在正试图通过添加动作挂钩和过滤器来使插件可扩展 - 我很擅长使用它们。

以下是我的主要插件文件中我的类的第一部分:

class Skizzar_Admin_Theme_Pages {

// Return (array) the properties of all Skizzar Admin Theme admin pages
static function get_pages( $page_slug = '' ) {

$pages = array();
// Add tabs to network admin page if global settings enabled
$is_network_only = ( is_multisite()) ? true : false;

// Default page properties
$default_args = array(
    'menu-title' => '',
    'tab-title' => '',
    'parent' => 'themes.php',
    'in-menu' => false,
    'has-tab' => true,
    'has-network-tab' => false,
    'tab-side' => false,
    'network' => false
);

$pages['sat-options-general'] = array_merge(
    $default_args,
    array(
        'slug' => 'sat-options-general',
        'menu-title' => _x( 'Admin Theme', 'Page title in the menu', 'skizzar_admin_theme' ),
        'tab-title' => _x( 'Admin Theme Options', 'Option tab title', 'skizzar_admin_theme' ),
        'title' => _x( 'Admin Theme Options', 'Option page title', 'skizzar_admin_theme' ),
        'callback' => array( __CLASS__, 'display_general_options_page' ),
        'in-menu' => true,
        'has-network-tab' => $is_network_only,
        'network' => $is_network_only
    )
);

return apply_filters( 'skizzar_admin_theme_tab', $pages, $default_args, $page_slug ); 

}

// Output the content of the requested options page
static function display_general_options_page() {
    $page_info = self::get_pages( 'sat-options-general' );
    include( plugin_dir_path( __FILE__ ) . 'inc/page-options-general.php' );
}

我在第一个函数中添加了一个过滤器,它允许我成功扩展它。现在我正在努力弄清楚我如何在外部添加类似于函数display_general_options_page的函数。

为了测试我的插件的易激性,我创建了第二个插件。我目前的代码是:

function add_google_analytics_tab( $pages, $default_args, $page_slug ) {


$pages['sat-google-analytics'] = array_merge(
    $default_args,
    array(
        'slug' => 'sat-google-analytics',
        'menu-title' => _x( 'Google Analytics', 'Page title in the menu', 'skizzar_admin_theme' ),
        'tab-title' => _x( 'Google Analytics', 'Option tab title', 'skizzar_admin_theme' ),
        'title' => _x( 'Google Analytics', 'Option page title', 'skizzar_admin_theme' ),
        'callback' => array( $this, 'display_google_analytics_page' ),
        'in-menu' => false,
        'has-network-tab' => true,
        'network' => true
    )
);
// Return
if ( $page_slug ) {
    if ( ! isset( $pages[ $page_slug ] ) ) {
        return null;
    }
    return $pages[ $page_slug ];
}
return $pages;
}
add_filter( 'skizzar_admin_theme_tab', 'add_google_analytics_tab', 1, 3 );

这使用我的主插件中的过滤器将另一个标签添加到插件页面。现在,我需要在单击选项卡时添加包含页面内容的功能。

我已将以下内容添加到我的插件中:

function display_google_analytics_page() {
    $page_info = get_pages( 'sat-google-analytics' );
    include( plugin_dir_path( __FILE__ ) . 'inc/hello.php' );
}

哪个应该显示名为hello.php的测试文件的内容(这只是回声“你好”。但没有显示。

我无法理解的是我如何将我的插件中的代码添加到我的主插件中的代码

1 个答案:

答案 0 :(得分:0)

您需要了解此基本

的加载模式
  1. 插件

  2. 主题

  3. 不幸的是,没有一种明确的方法可以首先指定加载某个插件等。所以在设计插件时你必须考虑到这一点。

    例如在你的插件中:

       add_action('init', 'my_filter_func');
    
       function my_filter_func(){
           $filt= 'unchanged';
           echo apply_filters('filter_me', $filt);
           exit;
       }
    

    现在这个函数将在所有插件和主题加载后的init挂钩上运行。因此,您可以在显示内容之前过滤插件或主题。