2016-11-16 16 views
4

私のワードプレステーマでは、woocommerceテンプレートをカスタマイズする際に問題が発生しています。テンプレートに変数として追加データを追加したいと思います。woocommerceテンプレートデータのカスタマイズと追加

アクティブな注文をダッシュ​​ボード/マイアカウントページに表示したいとします。私はorders.phpテンプレートでどのように行われているかのように、データ変数をテンプレートに渡して呼び出すことができます。

自分のテーマでwc-template-functions.phpを無効にしてから、ダッシュボードまたはアカウントのwc_get_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'); 

/theme-directory/woocommerce/templates/myaccount/dashboard.php:私が試した何

は、次のようなフックを作成しています私のaccount.phpで試しました)

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

$fr_account_orders戻ってきます。しかし、フック関数の配列var_dumpがあれば、データが戻ってきます。どんな助けもありがとうございます。

答えて

0

イェアシあります。変数を返す場合は、それを行う方法ではありません。あなたはそのようapply_filtersを使用する必要があります。

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ここをクリックhttps://developer.wordpress.org/reference/functions/apply_filters/もう1つ、テンプレートを変更しないでください。add_actiondo_actionのフックで使用すると、互換性が向上します。ありがとう!

+0

これを実行すると、ページ番号が正しく機能しませんでした。そのため、フィルタを作成する代わりに、テンプレートに上記のコードを追加しました。 – Jamie

1

私はいくつかの方法を試して、ページネーションを正しく維持する方法を理解できませんでした。この方法では、ダッシュボード上のすべての注文を一覧表示します。

$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; 
関連する問題