【问题标题】:Making my wordpress plugin extensible使我的 wordpress 插件可扩展
【发布时间】:2016-03-14 10:20:45
【问题描述】:

我写了一个 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 的测试文件的内容(它只是回显“hello”。但没有显示。

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

【问题讨论】:

    标签: php wordpress plugins


    【解决方案1】:

    您需要了解 this..basic 的加载模式

    1. 插件

    2. 主题

    不幸的是,实际上并没有明确的方法来指定首先加载某个插件等。所以在设计插件时必须考虑到这一点。

    例如在您的插件中:

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

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

    【讨论】:

      猜你喜欢
      • 2017-03-31
      • 1970-01-01
      • 2011-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-27
      • 1970-01-01
      相关资源
      最近更新 更多