Prevent action running for non-instance screens

Co-Authored-By: grola <grola@users.noreply.github.com>
This commit is contained in:
Mike Jolley 2018-05-24 20:35:48 +01:00
parent 187eff6e95
commit 974d33eb85
1 changed files with 31 additions and 15 deletions

View File

@ -524,31 +524,47 @@ abstract class WC_Shipping_Method extends WC_Settings_API {
}
/**
* Processes and saves options.
* If there is an error thrown, will continue to save and validate fields, but will leave the erroring field out.
* Processes and saves global shipping method options in the admin area.
*
* This method is usually attached to woocommerce_update_options_x hooks.
*
* @since 2.6.0
* @return bool was anything saved?
*/
public function process_admin_options() {
if ( $this->instance_id ) {
$this->init_instance_settings();
return $this->process_instance_options();
}
$post_data = $this->get_post_data();
return parent::process_admin_options();
}
foreach ( $this->get_instance_form_fields() as $key => $field ) {
if ( 'title' !== $this->get_field_type( $field ) ) {
try {
$this->instance_settings[ $key ] = $this->get_field_value( $key, $field, $post_data );
} catch ( Exception $e ) {
$this->add_error( $e->getMessage() );
}
/**
* Processes and saves options for a shipping method instance.
*
* @since 3.4.1
* @return bool was anything saved?
*/
public function process_instance_options() {
// Check we are processing the correct form for this instance.
if ( ! $this->instance_id || ! isset( $_REQUEST['instance_id'] ) || absint( $_REQUEST['instance_id'] ) !== $this->instance_id ) { // WPCS: input var ok, CSRF ok.
return false;
}
$this->init_instance_settings();
$post_data = $this->get_post_data();
foreach ( $this->get_instance_form_fields() as $key => $field ) {
if ( 'title' !== $this->get_field_type( $field ) ) {
try {
$this->instance_settings[ $key ] = $this->get_field_value( $key, $field, $post_data );
} catch ( Exception $e ) {
$this->add_error( $e->getMessage() );
}
}
return update_option( $this->get_instance_option_key(), apply_filters( 'woocommerce_shipping_' . $this->id . '_instance_settings_values', $this->instance_settings, $this ) );
} else {
return parent::process_admin_options();
}
return update_option( $this->get_instance_option_key(), apply_filters( 'woocommerce_shipping_' . $this->id . '_instance_settings_values', $this->instance_settings, $this ), 'yes' );
}
}