Do_action()挂钩到Load-(页面)

时间:2015-05-20 作者:Robbert

我已经创建了一个管理主题设置页面,在这里我将所有设置保存在wp\\U选项中。现在我想通过插件扩展这个设置页面,插件可以根据主题需要的设置来激活和停用。例如,每个国家有不同的支付提供商。

“我的设置”页面选项字段按选项卡排序,例如“常规”、“付款”、“度量”等。

因此,我必须让三件事可以挂钩:

制表符的内容保存制表符内容前2个(制表符和制表符内容)成功,但saving 选项卡内容的。我想这是因为我load-(page) 行动挂钩。我已经测试了各种内容,但找不到为什么这些内容没有保存。

Admin init:

function gtp_admin_init() {
    $settings = get_option( \'gtp_theme_settings\' );
    if( empty( $settings ) ) {
        $settings = array();    
        add_option( \'gtp_theme_settings\', $settings, \'\', \'yes\' );
    }
}
add_action( \'init\', \'gtp_admin_init\' );

Create admin settings page and load settings page by gtp_load_settings_page():

function gtp_settings_page_init() {
    $settings_page = add_theme_page( __( \'Theme settings\', \'gtp_translate\' ), __( \'Theme settings\', \'gtp_translate\' ), \'edit_theme_options\', \'theme-settings\', \'gtp_settings_page\' );
    add_action( \'load-\' . $settings_page, \'gtp_load_settings_page\' );
}
add_action( \'admin_menu\', \'gtp_settings_page_init\' );

Load right tab page after submitting data:

function gtp_load_settings_page() {
    if( isset( $_POST[\'submit\'] ) ) {
        check_admin_referer( \'gtp-settings-page\' );
        gtp_save_theme_settings();
        $url_parameters = isset( $_GET[\'tab\'] ) ? \'updated=true&tab=\' . $_GET[\'tab\'] : \'updated=true\';
        wp_redirect( admin_url( \'themes.php?page=theme-settings&\' . $url_parameters ) );
        exit; 
    }
}

Save settings + action hook:

在这部分的底部,您可以看到我插入了do\\u action()函数来保存额外的选项卡内容。

function gtp_save_theme_settings() {
    global $pagenow;

    // Get settings from options table
    $settings = get_option( \'gtp_theme_settings\' );

    // Check which tab is active
    if( $pagenow == \'themes.php\' && $_GET[\'page\'] == \'theme-settings\' ) {
        if( isset( $_GET[\'tab\'] ) ) 
            $tab = $_GET[\'tab\'];
        else 
            $tab = \'general\';
    }

    // Check which data to save
    switch( $tab ) {
        case \'general\' :
            $settings[\'gtp_contact_redirect\']   = $_POST[\'gtp_contact_redirect\'];
            $settings[\'gtp_review_redirect\']    = $_POST[\'gtp_review_redirect\'];
            break;

        case \'payment\' :
            $settings[\'gtp_payment_setting\']    = $_POST[\'gtp_payment_setting\'];        
            break;
    }   

    // Hook save settings
    do_action( \'gtp_theme_settings_tab_save\', $tab, $settings, $_POST );

    $updated = update_option( \'gtp_theme_settings\', $settings );    
}
function gtp_load_settings_page() {
    if( isset( $_POST[\'submit\'] ) ) {
        check_admin_referer( \'gtp-settings-page\' );
        gtp_save_theme_settings();
        $url_parameters = isset( $_GET[\'tab\'] ) ? \'updated=true&tab=\' . $_GET[\'tab\'] : \'updated=true\';
        wp_redirect( admin_url( \'themes.php?page=theme-settings&\' . $url_parameters ) );
        exit; 
    }
}

1 个回复
最合适的回答,由SO网友:Robbert 整理而成

我已更改了apply\\u筛选器()的do\\u操作()。其工作原理如下:

// Filter save settings
$settings = apply_filters( \'gtp_theme_settings_tab_save\', $settings, $tab, $_POST );
$updated = update_option( \'gtp_theme_settings\', $settings );  
然后,插件文件中的add\\u过滤器如下所示:

function ac_theme_settings_tab_save( $settings, $tab, $postdata ) {

    if( $tab == \'adcalls\' ) {
        $settings[\'gtp_adcalls_domain_id\'] = $postdata[\'gtp_adcalls_domain_id\'];
    }
    return $settings;

}
add_filter( \'gtp_theme_settings_tab_save\', \'ac_theme_settings_tab_save\', 10, 3 );

结束

相关推荐

Admin search ACF relationship

我有一个自定义的帖子类型名称story. 它有一个名为\'select_artist\' 与名为artist.在story 编辑页面,我想使用搜索框搜索\'select_artist\' 标题目前,它只会在我搜索艺术家帖子ID时返回结果,但我希望能够搜索艺术家帖子标题。有什么建议吗?