0

I am trying to have a variable out of the filter

At the end of there is return apply_filters( 'woocommerce_account_menu_items', $items, $endpoints );

function wc_get_account_menu_items() {
    $endpoints = array(
        'orders'          => get_option( 'woocommerce_myaccount_orders_endpoint', 'orders' ),
        'downloads'       => get_option( 'woocommerce_myaccount_downloads_endpoint', 'downloads' ),
        'edit-address'    => get_option( 'woocommerce_myaccount_edit_address_endpoint', 'edit-address' ),
        'payment-methods' => get_option( 'woocommerce_myaccount_payment_methods_endpoint', 'payment-methods' ),
        'edit-account'    => get_option( 'woocommerce_myaccount_edit_account_endpoint', 'edit-account' ),
        'customer-logout' => get_option( 'woocommerce_logout_endpoint', 'customer-logout' ),
    );

    $items = array(
        'dashboard'       => __( 'Dashboard', 'woocommerce' ),
        'orders'          => __( 'Orders', 'woocommerce' ),
        'downloads'       => __( 'Downloads', 'woocommerce' ),
        'edit-address'    => _n( 'Addresses', 'Address', (int) wc_shipping_enabled(), 'woocommerce' ),
        'payment-methods' => __( 'Payment methods', 'woocommerce' ),
        'edit-account'    => __( 'Account details', 'woocommerce' ),
        'customer-logout' => __( 'Logout', 'woocommerce' ),
    );

    // Remove missing endpoints.
    foreach ( $endpoints as $endpoint_id => $endpoint ) {
        if ( empty( $endpoint ) ) {
            unset( $items[ $endpoint_id ] );
        }
    }

    // Check if payment gateways support add new payment methods.
    if ( isset( $items['payment-methods'] ) ) {
        $support_payment_methods = false;
        foreach ( WC()->payment_gateways->get_available_payment_gateways() as $gateway ) {
            if ( $gateway->supports( 'add_payment_method' ) || $gateway->supports( 'tokenization' ) ) {
                $support_payment_methods = true;
                break;
            }
        }

        if ( ! $support_payment_methods ) {
            unset( $items['payment-methods'] );
        }
    }

    return apply_filters( 'woocommerce_account_menu_items', $items, $endpoints );
}

if I have a class like this

Class MyClass{
   public function __construct(){
          add_filter ( 'woocommerce_account_menu_items', array($this, 'wooquickmy_grab_endpoints'), 10 , 1 );
        add_action( 'admin_menu', array( $this,'wooquickmy_options_page' ));
  }

   public function wooquickmy_options_page(){
         //get the return value from there wooquickmy_grab_endpoints
    }

public function wooquickmy_grab_endpoints($endpoints){
        return $endpoints ;
    }
}

Is it possible to get that return value inside the action that I have created? What is the best possible option for such cases?

Please Help

Thanks

1
  • admin_menu runs in the back end, and woocommerce_account_menu_items runs on the front end, so no, you won't be able to get the list of endpoints in the back-end. Commented Dec 29, 2020 at 2:09

1 Answer 1

-1

The filter has 2 args, not one.

Try:

add_filter ( 'woocommerce_account_menu_items', array($this, 'wooquickmy_grab_endpoints'), 10 , 2 );

public function wooquickmy_grab_endpoints($items, $endpoints){
        // do something with $endpoints
        return $items;
    }
2
  • Thanks but the question is not that, I need: wooquickmy_options_page function to have the return value in wooquickmy_grab_endpoints
    – GeekyOwl
    Commented Dec 28, 2020 at 17:57
  • Then set a class variable to the value of $endpoints. But admin_menu probably fires before the filter hook - if so, the value will not be available.
    – shanebp
    Commented Dec 28, 2020 at 19:01

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.