php - para - Personalizar y agregar datos de plantillas woocommerce
formulario de contacto wordpress sin plugin (2)
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.
Intenté varias formas y no pude encontrar la forma de mantener la paginación correcta. De esta forma, se enumeran todos los pedidos en mi panel.
$paged = (get_query_var(''paged'')) ? get_query_var(''paged'') : 1;
$args = array(
''posts_per_page'' => 3,
''paged'' => $paged,
''meta_key'' => ''_customer_user'',
''meta_value'' => get_current_user_id(),
''post_type'' => wc_get_order_types(),
''post_status'' => array (''wc-pending''),
);
$customer_waiting_orders = new WP_Query( $args );
if ( $customer_available_orders->have_posts() ) :
while ( $customer_available_orders->have_posts() ) : $customer_available_orders->the_post();
//code here
wp_reset_postdata();
endwhile;
endif;
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!