在 Woocommerce 3 中显示自定义帐户菜单项的自定义内容
Display custom content for a custom account menu item in Woocommerce 3
我正在尝试根据 Woocommerce 中的用户总购买量在我的自定义帐户菜单元素中显示自定义通知,基于此答案代码:
它没有像我想要的那样工作。我做错了什么?
这是我使用的代码:
add_filter ( 'woocommerce_account_menu_items', 'xu', 40 );
function xu( $menu_links ){
$menu_links = array_slice( $menu_links, 0,3 , true )
+ array( 'xu' => 'Xu của bạn' )
+ array_slice( $menu_links, 3, NULL, true );
return $menu_links;
}
add_action( 'init', 'add_endpoint' );
function add_endpoint() {
add_rewrite_endpoint( 'xu', EP_PAGES );
}
add_action( 'woocommerce_account_xu_endpoint', 'xuxu' );
function xuxu() {
if( ! WC()->session->get( 'purchases_sum' ) ){
WC()->session->set('purchases_sum',
get_customer_total_purchases_sum());
}
$total_purchases = WC()->session->get( 'purchases_sum' );
if ( $total_purchases == 0 ) return; // We exit (no purchases or non logged users)
if ( ( 10000 - $total_purchases ) > 0 )
{
echo 'You need an extra ' . wc_price( 10000 - $total_purchases ) . ' at all to get a... ';
}
else
{
echo '... ';
}
}
感谢任何帮助。
Please when asking in Whosebug, use real english in your function names, variables and text as this is for a large community where english is the language. Try always to give explicit names.
要使您的自定义菜单项的内容显示,您需要刷新重写规则。
为此,请转到 WordPress 设置 > 永久链接……然后单击 "Save changes"。 现在您的内容将出现。
这是您重新访问的代码(格式清晰),添加了一些内容以删除感谢页面上的会话值:
// Utililty function to get customer's total purchases sum
function get_customer_total_purchases_sum() {
$current_user_id = get_current_user_id(); // Current user ID
if( $current_user_id == 0 ) return 0; // we return zero if customer is not logged in
global $wpdb;
// return the SQL query (paid orders sum)
return $wpdb->get_var("SELECT SUM(pm.meta_value) FROM {$wpdb->prefix}postmeta as pm
INNER JOIN {$wpdb->prefix}postmeta as pm2 ON pm.post_id = pm2.post_id
INNER JOIN {$wpdb->prefix}posts as p ON pm.post_id = p.ID
WHERE p.post_status LIKE 'wc-completed' AND p.post_type LIKE 'shop_order'
AND pm.meta_key LIKE '_order_total' AND pm2.meta_key LIKE '_customer_user'
AND pm2.meta_value LIKE '$current_user_id'");
}
add_filter ( 'woocommerce_account_menu_items', 'custom_account_menu_items', 10 );
function custom_account_menu_items( $menu_links ){
$menu_links = array_slice( $menu_links, 0,3 , true )
+ array( 'rewards' => 'Rewards' )
+ array_slice( $menu_links, 3, NULL, true );
return $menu_links;
}
add_action( 'init', 'add_rewards_account_endpoint' );
function add_rewards_account_endpoint() {
add_rewrite_endpoint( 'rewards', EP_PAGES );
}
add_action( 'woocommerce_account_rewards_endpoint', 'rewards_account_endpoint_content' );
function rewards_account_endpoint_content() {
if( ! WC()->session->get( 'purchases_sum' ) ){
WC()->session->set('purchases_sum', get_customer_total_purchases_sum());
}
$total_purchases = WC()->session->get( 'purchases_sum' );
if ( $total_purchases == 0 ) return; // We exit (no purchases or non logged users)
if ( ( 10000 - $total_purchases ) > 0 )
{
echo 'You need an extra ' . wc_price( 10000 - $total_purchases ) . ' at all to get a... ';
}
else
{
echo '... ';
}
}
// Removing the purchase_sum session value on thankyou page.
add_action( 'template_redirect', 'removing_purchases_sum_session' );
function removing_purchases_sum_session( ) {
if ( is_wc_endpoint_url('order-received') && WC()->session->get( 'purchases_sum' ) ) {
// We remove this session variable in thankyou page (if it still exist)
WC()->session->__unset( 'purchases_sum' );
}
}
此代码位于您的活动子主题(或主题)的 function.php 文件中。已测试并有效。
我正在尝试根据 Woocommerce 中的用户总购买量在我的自定义帐户菜单元素中显示自定义通知,基于此答案代码:
它没有像我想要的那样工作。我做错了什么?
这是我使用的代码:
add_filter ( 'woocommerce_account_menu_items', 'xu', 40 );
function xu( $menu_links ){
$menu_links = array_slice( $menu_links, 0,3 , true )
+ array( 'xu' => 'Xu của bạn' )
+ array_slice( $menu_links, 3, NULL, true );
return $menu_links;
}
add_action( 'init', 'add_endpoint' );
function add_endpoint() {
add_rewrite_endpoint( 'xu', EP_PAGES );
}
add_action( 'woocommerce_account_xu_endpoint', 'xuxu' );
function xuxu() {
if( ! WC()->session->get( 'purchases_sum' ) ){
WC()->session->set('purchases_sum',
get_customer_total_purchases_sum());
}
$total_purchases = WC()->session->get( 'purchases_sum' );
if ( $total_purchases == 0 ) return; // We exit (no purchases or non logged users)
if ( ( 10000 - $total_purchases ) > 0 )
{
echo 'You need an extra ' . wc_price( 10000 - $total_purchases ) . ' at all to get a... ';
}
else
{
echo '... ';
}
}
感谢任何帮助。
Please when asking in Whosebug, use real english in your function names, variables and text as this is for a large community where english is the language. Try always to give explicit names.
要使您的自定义菜单项的内容显示,您需要刷新重写规则。
为此,请转到 WordPress 设置 > 永久链接……然后单击 "Save changes"。 现在您的内容将出现。
这是您重新访问的代码(格式清晰),添加了一些内容以删除感谢页面上的会话值:
// Utililty function to get customer's total purchases sum
function get_customer_total_purchases_sum() {
$current_user_id = get_current_user_id(); // Current user ID
if( $current_user_id == 0 ) return 0; // we return zero if customer is not logged in
global $wpdb;
// return the SQL query (paid orders sum)
return $wpdb->get_var("SELECT SUM(pm.meta_value) FROM {$wpdb->prefix}postmeta as pm
INNER JOIN {$wpdb->prefix}postmeta as pm2 ON pm.post_id = pm2.post_id
INNER JOIN {$wpdb->prefix}posts as p ON pm.post_id = p.ID
WHERE p.post_status LIKE 'wc-completed' AND p.post_type LIKE 'shop_order'
AND pm.meta_key LIKE '_order_total' AND pm2.meta_key LIKE '_customer_user'
AND pm2.meta_value LIKE '$current_user_id'");
}
add_filter ( 'woocommerce_account_menu_items', 'custom_account_menu_items', 10 );
function custom_account_menu_items( $menu_links ){
$menu_links = array_slice( $menu_links, 0,3 , true )
+ array( 'rewards' => 'Rewards' )
+ array_slice( $menu_links, 3, NULL, true );
return $menu_links;
}
add_action( 'init', 'add_rewards_account_endpoint' );
function add_rewards_account_endpoint() {
add_rewrite_endpoint( 'rewards', EP_PAGES );
}
add_action( 'woocommerce_account_rewards_endpoint', 'rewards_account_endpoint_content' );
function rewards_account_endpoint_content() {
if( ! WC()->session->get( 'purchases_sum' ) ){
WC()->session->set('purchases_sum', get_customer_total_purchases_sum());
}
$total_purchases = WC()->session->get( 'purchases_sum' );
if ( $total_purchases == 0 ) return; // We exit (no purchases or non logged users)
if ( ( 10000 - $total_purchases ) > 0 )
{
echo 'You need an extra ' . wc_price( 10000 - $total_purchases ) . ' at all to get a... ';
}
else
{
echo '... ';
}
}
// Removing the purchase_sum session value on thankyou page.
add_action( 'template_redirect', 'removing_purchases_sum_session' );
function removing_purchases_sum_session( ) {
if ( is_wc_endpoint_url('order-received') && WC()->session->get( 'purchases_sum' ) ) {
// We remove this session variable in thankyou page (if it still exist)
WC()->session->__unset( 'purchases_sum' );
}
}
此代码位于您的活动子主题(或主题)的 function.php 文件中。已测试并有效。