skip to Main Content

i want to add product sku to actual product title.
for example, if product name is “Dress design” & product sku is “2790”
the new product title should be “Dress design – 2790”.

i had tried following code. but this code replaces the product title by the product SKU on single product pages.

add_action( 'woocommerce_single_product_summary', 'replace_product_title_by_product_sku', 4 );
function replace_product_title_by_product_sku() {
    global $product;

    if ( $product->get_sku() ) {
        remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_title', 5 );
        add_action( 'woocommerce_single_product_summary', 'display_product_sku_as_title', 5 );
    }
}

function display_product_sku_as_title() {
    global $product;

    echo '<h1 class="product_title entry-title">' . esc_html( $product->get_sku() ) . '</h1>';
}

but i want “product title + Sku”, & i want to display it on single product page & shop page & checkout page & cart page.

2

Answers


  1. Just replace this line:

    echo '<h1 class="product_title entry-title">' . esc_html( $product->get_sku() ) . '</h1>';
    

    with:

    echo '<h1 class="product_title entry-title">' . $product->get_title() . ' - ' . esc_html( $product->get_sku() ) . '</h1>';
    

    You are done with it!

    Login or Signup to reply.
  2. Why don’t you directly change the titles by appending SKU to current titles instead of changing the view only?

    function append_sku_to_titles() {
    
     $all_ids = get_posts( array(
        'post_type' => 'product',
        'numberposts' => -1,
        'post_status' => 'publish',
        'fields' => 'ids'
    ));
    
    foreach ( $all_ids as $id ) {
            $_product = wc_get_product( $id );
            $_sku = $_product->get_sku();
            $_title = $_product->get_title();
    
            $new_title = $_title . " " . $_sku;
    
            /*
            *   Tested.
            *   echo $_title + $_sku;
            *   echo("<script>console.log('Old: ".$_title. " - ". $_sku."');</script>");
            *   echo("<script>console.log('New: ".$new_title."');</script>");
            */
    
            $updated = array();
            $updated['ID'] = $id;
            $updated['post_title'] = $new_title;
    
            wp_update_post( $updated );
    }}
    
    //Call the function with footer (*Attention)
    add_action( 'wp_footer', 'append_sku_to_titles' );
    

    *Attention: Do not forget to remove this line (add_action) after you change the titles since it will try to change them whenever a page loads

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search