it-swarm.com.de

do_action () Hook in load- (Seite)

Ich habe eine Einstellungsseite für das Admin-Design erstellt, auf der ich alle meine Einstellungen in wp_options speichere. Jetzt möchte ich diese Einstellungsseite um Plugins erweitern, die aktiviert und deaktiviert werden können, je nachdem, welche Einstellungen für dieses Thema erforderlich sind. Zum Beispiel unterschiedliche Zahlungsanbieter pro Land.

Die Optionsfelder auf der Seite "Meine Einstellungen" sind nach Registerkarten sortiert, z. B. "Allgemein", "Zahlung", "Messung" usw.

Also muss ich 3 Dinge hakelbar machen:

  1. Tabs
  2. Der Inhalt einer Registerkarte
  3. Das Speichern des Registerkarteninhalts

Die ersten 2 (Tabs und Tab-Inhalt) sind erfolgreich, das Speichern des Tab-Inhalts jedoch nicht. Ich denke das liegt daran, dass ich mich in den load- (page) action hook einhänge. Ich habe alle möglichen Dinge getestet, kann aber nicht feststellen, warum dieser Inhalt nicht gespeichert wird.

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

Erstelle Admin-Einstellungsseite und lade Einstellungsseite von 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' );

Lade die rechte Registerkarte nach dem Absenden der Daten:

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

Einstellungen speichern + Aktions-Hook:

Unten in diesem Teil sehen Sie, dass ich die Funktion do_action () zum Speichern von zusätzlichen Tab-Inhalten eingefügt habe.

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

Der Haken zum Speichern von add_action in meiner Plugin-Datei

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

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

}
add_action( 'gtp_theme_settings_tab_save', 'ac_theme_settings_tab_save', 10, 3 );
1
Robbert

Ich habe die do_action () für ein apply_filter () geändert. Dies funktionierte wie folgt:

// Filter save settings
$settings = apply_filters( 'gtp_theme_settings_tab_save', $settings, $tab, $_POST );
$updated = update_option( 'gtp_theme_settings', $settings );  

Und dann sieht mein add_filter in der Plugin-Datei so aus:

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 );
0
Robbert