Php 自定义和添加电子商务模板数据

Php 自定义和添加电子商务模板数据,php,wordpress,templates,woocommerce,hook,Php,Wordpress,Templates,Woocommerce,Hook,我在自定义WoodPress主题中的woocommerce模板时遇到一些问题。我想在我的模板中添加额外的数据作为变量 我想在仪表板/我的帐户页面上显示活动订单。我想通过向模板传递顺序数据变量来实现这一点,以便能够调用,就像在orders.php模板中那样 我知道我可以覆盖主题中的wc template functions.php,然后在仪表板或我的帐户的wc\u get\u templates函数中添加数据。然而,我不想这样做 我尝试创建一个钩子,例如: functions.php functi

我在自定义WoodPress主题中的woocommerce模板时遇到一些问题。我想在我的模板中添加额外的数据作为变量

我想在仪表板/我的帐户页面上显示活动订单。我想通过向模板传递顺序数据变量来实现这一点,以便能够调用,就像在
orders.php
模板中那样

我知道我可以覆盖主题中的
wc template functions.php
,然后在仪表板或我的帐户的
wc\u get\u templates
函数中添加数据。然而,我不想这样做

我尝试创建一个钩子,例如:

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' );

$fr\u account\u订单
返回空值。但是,如果我
var\u dump
钩子函数中的数组,它会返回数据。非常感谢您的帮助。

。如果你想返回变量,那不是方法。您应该像这样使用
apply_过滤器

function wc_fr_add_orders_to_account() {
    /* your function */

    return $fr_account_orders;
}
add_filter( 'woocommerce_account_dashboard', 'wc_fr_add_orders_to_account' );
在你的模板中

$my_var = apply_filters( 'woocommerce_account_dashboard', $fr_account_orders );
var_dump( $my_var );
现在,如果要发送一些变量,请按如下方式发送:

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 );
在你的模板中

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

阅读有关
apply_filters
的更多信息,这里还有一件事,请不要更改模板,而是使用
do_action
模板挂钩上的
add_action
,以获得更好的兼容性。谢谢

我尝试了几种方法,但不知道如何保持分页正确。这样可以列出我的仪表板上的所有订单

$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;

执行此操作时,分页无法正常工作。因此,我没有创建过滤器,而是将上面的代码添加到我的模板中。
$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;