Merge pull request #22970 from woocommerce/update/22959
Check types of defined Payment Gateways
This commit is contained in:
commit
f0de2a6d23
|
@ -90,14 +90,21 @@ class WC_Payment_Gateways {
|
|||
|
||||
// Load gateways in order.
|
||||
foreach ( $load_gateways as $gateway ) {
|
||||
$load_gateway = is_string( $gateway ) ? new $gateway() : $gateway;
|
||||
if ( is_string( $gateway ) && class_exists( $gateway ) ) {
|
||||
$gateway = new $gateway();
|
||||
}
|
||||
|
||||
if ( isset( $ordering[ $load_gateway->id ] ) && is_numeric( $ordering[ $load_gateway->id ] ) ) {
|
||||
// Gateways need to be valid and extend WC_Payment_Gateway.
|
||||
if ( ! is_a( $gateway, 'WC_Payment_Gateway' ) ) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if ( isset( $ordering[ $gateway->id ] ) && is_numeric( $ordering[ $gateway->id ] ) ) {
|
||||
// Add in position.
|
||||
$this->payment_gateways[ $ordering[ $load_gateway->id ] ] = $load_gateway;
|
||||
$this->payment_gateways[ $ordering[ $gateway->id ] ] = $gateway;
|
||||
} else {
|
||||
// Add to end of the array.
|
||||
$this->payment_gateways[ $order_end ] = $load_gateway;
|
||||
$this->payment_gateways[ $order_end ] = $gateway;
|
||||
$order_end++;
|
||||
}
|
||||
}
|
||||
|
@ -150,7 +157,18 @@ class WC_Payment_Gateways {
|
|||
}
|
||||
}
|
||||
|
||||
return apply_filters( 'woocommerce_available_payment_gateways', $_available_gateways );
|
||||
return array_filter( (array) apply_filters( 'woocommerce_available_payment_gateways', $_available_gateways ), array( $this, 'filter_valid_gateway_class' ) );
|
||||
}
|
||||
|
||||
/**
|
||||
* Callback for array filter. Returns true if gateway is of correct type.
|
||||
*
|
||||
* @since 3.6.0
|
||||
* @param object $gateway Gateway to check.
|
||||
* @return bool
|
||||
*/
|
||||
protected function filter_valid_gateway_class( $gateway ) {
|
||||
return $gateway && is_a( $gateway, 'WC_Payment_Gateway' );
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Loading…
Reference in New Issue