[Php] Personalizar y agregar datos de plantillas woocommerce


Answers

Eaasy allí. Si desea devolver la variable, esa no es la forma de hacerlo. Deberías usar los apply_filters así:

function wc_fr_add_orders_to_account() {
    /* your function */

    return $fr_account_orders;
}
add_filter( 'woocommerce_account_dashboard', 'wc_fr_add_orders_to_account' );

y en tu plantilla ...

$my_var = apply_filters( 'woocommerce_account_dashboard', $fr_account_orders );
var_dump( $my_var );

ahora si quieres enviar algunas variables hazlo así:

function wc_fr_add_orders_to_account( $var1, $var2 ) {
    /* your function */

    return $fr_account_orders;
}
add_filter( 'woocommerce_account_dashboard', 'wc_fr_add_orders_to_account', 10, 3 );

y en tu plantilla de nuevo ...

$my_var = apply_filters( 'woocommerce_account_dashboard', $fr_account_orders, $var1, $var2 );
var_dump( $my_var );

lea más sobre apply_filters aquí https://developer.wordpress.org/reference/functions/apply_filters/ una cosa más, trate de no cambiar las plantillas, pero use add_action en los ganchos do_action de la plantilla para una mejor compatibilidad. ¡Gracias!

Question

Tengo problemas para personalizar las plantillas de woocommerce en mi tema de WordPress. Me gustaría agregar datos adicionales como variables en mis plantillas.

Quiero mostrar pedidos activos en la página del tablero / mi cuenta. Quiero hacer esto pasando variables de datos de orden a la plantilla para poder llamar, como la forma en que se hace en la plantilla orders.php .

Sé que puedo anular el wc-template-functions.php en mi tema y luego agregar los datos en la función wc_get_templates para el tablero o mi cuenta. Sin embargo, no quiero hacer esto.

Lo que he intentado es crear un gancho como:

functions.php

function wc_fr_add_orders_to_account( $fr_account_orders, $current_page ) {
  global $fr_account_orders;
  $current_page = empty( $current_page ) ? 1 : absint( $current_page );

  $customer_orders = wc_get_orders( apply_filters( 'woocommerce_my_account_my_orders_query', 
    array( 
      'customer' => get_current_user_id(), 
      'page' => $current_page, 
      'paginate' => true,
      'status' => array( 'wc-pending' )
      ) ) );

  $fr_account_orders = array(
    'current_page' => absint( $current_page ),
    'customer_orders' => $customer_orders,
    'has_orders' => 0 < $customer_orders->total
  );

  return $fr_account_orders;
}
add_action( 'woocommerce_account_content', 'wc_fr_add_orders_to_account' );

/theme-directory/woocommerce/templates/myaccount/dashboard.php (también intentado en my-account.php)

do_action( 'woocommerce_account_dashboard', $fr_account_orders);
var_dump($fr_account_orders);

$fr_account_orders vuelve nulo. Sin embargo, si var_dump el conjunto en la función de enlace, vuelve con datos. Cualquier ayuda es apreciada.