根据 WooCommerce 购物车、感谢和电子邮件中的产品类别显示自定义文本

问题描述 投票:0回答:1

如标题所示,我必须根据客户添加的产品类别在 woocommerce 购物车中显示自定义文本

// Add a function to show custom text on the cart page
add_action( 'woocommerce_before_cart', 'show_custom_text' );

// Define the function
function show_custom_text() {
  // Get the current cart
  $cart = WC()->cart;
  
  // Check if the cart is empty
  if ( $cart->is_empty() ) {
    return;
  }
  
  // Create an associative array with the product categories and related texts to display
  $categories_and_texts = array(
    '1' => 'This is text 1',
    '2' => 'This is text 2',
    '3' => 'This is text 3',
    // Add more categories and lyrics here
  );
  
  // Create an empty array to store the categories in the cart
  $categories_in_cart = array();
  
  // Iterate over all the items in the cart
  foreach ( $cart->get_cart() as $cart_item ) {
    // Get the current product
    $product = $cart_item['data'];
    
    // Get product categories
    $product_categories = wp_get_post_terms( $product->get_id(), 'product_cat' );
    
    // Iterate over all product categories
    foreach ( $product_categories as $product_category ) {
      // Get the category slug
      $category_slug = $product_category->slug;
      
      // Check if the category is among those defined in the associative array
      if ( array_key_exists( $category_slug, $categories_and_texts ) ) {
        // Add the category to the array of categories in the cart, if not already present
        if ( ! in_array( $category_slug, $categories_in_cart ) ) {
          $categories_in_cart[] = $category_slug;
        }
      }
    }
  }
  
  // Check if there are any categories in the cart
  if ( ! empty( $categories_in_cart ) ) {
    // Show a message before custom texts
    echo '<p>Attention, you have added products from the following categories to your cart:</p>';
    
    // Iterate over all the categories in the cart
    foreach ( $categories_in_cart as $category ) {
      // Show the text corresponding to the category
      echo '<p>' . $categories_and_texts[$category] . '</p>';
    }
  }
}

我正在尝试这个功能,但似乎不起作用

我还想在感谢页面和订单电子邮件中显示文字

谢谢你

php function woocommerce cart
1个回答
0
投票

以下重新访问的代码将根据购物车、结帐、收到的订单(谢谢)和电子邮件通知上的产品类别(slugs)显示自定义文本。

代码(您在第一个功能中的设置)

// Settings: Add category term slug(s) and their respective text below
function load_category_settings() {
    return array(
        array( 
            'terms' => array('accessories'), // Here your term(s) slug(s)
            'text'  => __("This is the custom text for Accessories", "woocommerce"), // Here the corresponding text
        ),
        array( 
            'terms' => array('tshirt', 'hoodie', 'shirt' ), // Here your term(s) slug(s)
            'text'  => __("This is the custom text for T-shirts, Hoodies, Shirts", "woocommerce"), // Here the corresponding text
        ),
    );
}

// Utility function: Check cart or order items for categories
function check_item_for_categories( $items, $term_slugs = array() ) {
    foreach ( $items as $item ) {
        $product_id = isset($item['product_id']) ? $item['product_id'] : $item->get_product_id();
        foreach ( load_category_settings() as $key => $values ) {
            foreach ( $values['terms'] as $term_slug  ) {
                if( has_term($term_slug , 'product_cat', $product_id ) ) {
                    $term_slugs[$key][] = $term_slug ;
                }
            }
        }
    }
    return $term_slugs;
}

// Utility function: Display custom texts based on item categories
function display_texts_for_categories( $term_slugs ) {
    $data = load_category_settings();
    $html =  __("Attention, you have added products from the following categories to your cart", "woocommerce") . ':<br>';

    foreach ( $term_slugs as $key => $terms ) {
        $html .= $data[$key]['text'] . '<br>';
    }
    return $html;
}


// Display on cart and checkout
add_action( 'woocommerce_before_cart', 'cart_checkout_show_custom_text', 10 ); // For cart page
add_action( 'woocommerce_before_checkout_form', 'cart_checkout_show_custom_text', 5 ); // For checkout page
function cart_checkout_show_custom_text() {
    $cart = WC()->cart; // Get the current cart
  
    // Check if the cart is empty
    if ( ! $cart->is_empty() ) {
        $term_slugs = check_item_for_categories( $cart->get_cart() );

        if( count($term_slugs) > 0 ) {
            wc_print_notice( display_texts_for_categories( $term_slugs ), 'notice' );
        }
    }
}

// Display on Order received (thankyou) page
add_action( 'woocommerce_before_thankyou', 'thankyou_show_custom_text', 10 ); // For checkout page
function thankyou_show_custom_text( $order_id ) {
    $order = wc_get_order($order_id); // Get the current order object
  
    // Check if the cart is empty
    $term_slugs = check_item_for_categories( $order->get_items() );
    if( count($term_slugs) > 0 ) {
        wc_print_notice( display_texts_for_categories( $term_slugs ), 'notice' );
    }
}

// Display custom fields data on email notifications
add_action( 'woocommerce_email_order_details', 'display_on_email_notifications', 5, 1 );
function display_on_email_notifications( $order ) {
    $term_slugs = check_item_for_categories( $order->get_items() );

    if ( ! empty($term_slugs) ) {
        $title = __('Information', 'woocommerce');

        echo '<style>
        .message table{width: 100%; font-family: \'Helvetica Neue\', Helvetica, Roboto, Arial, sans-serif;
            color: #737373; border: 1px solid #e4e4e4; margin-bottom:8px;}
        .message table th, .message table td{text-align: left; border-top-width: 4px;
            color: #737373; border: 1px solid #e4e4e4; padding: 12px; width:58%;}
        .message table td{text-align: left; border-top-width: 4px; color: #737373; border: 1px solid #e4e4e4; padding: 12px;}
        </style>';

        echo '<div class="message"><h2>'.$title.'</h2>
        <table cellspacing="0" cellpadding="6"><tbody>
        <tr"><td>'.display_texts_for_categories( $term_slugs ).'</td></tr>
        </tbody></table></div><br>';
    }
}

代码位于子主题的functions.php 文件中(或插件中)。已测试并有效。

© www.soinside.com 2019 - 2024. All rights reserved.