2
votes

Is it possible to remove the first word from the product title in WooCommerce? I've found some php code but I can't figure it out at the moment.

echo substr(strstr("Remove First Word"," "), 1);

That should echo "First Word". How would I do that for the WooCommerce product title? I appreciate all the help!

3
Yes it is, first of. Where do you want to serve the product title? Checkout? Product list? Product page?Yvan Watchman
Thanks for your answer Yvan. It should work on every frontend page.Valixx
@Fluxec, see my answer on how to do the first word remove.user2342558
@Fluxec The product title uses Wordpress function get_the_title() or the_title() to be displayed (as woocommerce product is a custom post type)… so the correct hook to be used is "the_title", see my answer please.LoicTheAztec
Oh I see. Thank you LoicTheAztec. I've answered below.Valixx

3 Answers

1
votes

use this:

  $str = "Remove First Word";
  $words = explode(' ', $str);
  unset($words[0]);
  echo join(' ', $words);

The explode function returns an array with each words.

The unset function remove the first word contained in the array $words.

Finally, join print all $words joined by space .

demo

1
votes

For product title in single product pages and archives pages:

add_filter( 'the_title', 'custom_the_title', 10, 2 );
function custom_the_title( $title, $post_id ){
    $post_type = get_post_field( 'post_type', $post_id, true );
    if( $post_type == 'product' || $post_type == 'product_variation' )
        $title = substr( strstr( $title, ' ' ), 1 );

    return $title;
}

Code goes in function.php file of your active child theme (or active theme).

Tested and works.

The product title uses WordPress function get_the_title() or the_title() to be displayed (as woocommerce product is a custom post type)… so the correct filter hook to be used is "the_title".

But it will not really handle html tags (as this are something else in the templates).


For cart and checkout pages:

add_filter( 'woocommerce_cart_item_name', 'customizing_cart_item_name', 10, 3);
function customizing_cart_item_name( $item_name, $cart_item, $cart_item_key ) {
    $product = $cart_item['data'];
    $product_permalink = $product->is_visible() ? $product->get_permalink( $cart_item ) : '';

    $product_name = $product->get_name();
    $product_name = substr( strstr( $product_name, ' ' ), 1 );

    if ( $product_permalink && is_cart() ) {
        return sprintf( '<a href="%s">%s</a>', esc_url( $product_permalink ), $product_name );
    } elseif ( ! $product_permalink && is_cart() ) {
        return $product_name . '&nbsp;';
    } else {
        return $product_name;
    }
}

Code goes in function.php file of your active child theme (or active theme).

Tested and works.

0
votes

Could you try using this?

if ( ! function_exists( 'woocommerce_template_loop_product_title' ) ) {

    /**
    * Removes first word in WooCommerce product_title
    * @var $tag
    */
    function woocommerce_template_loop_product_title() {
        $tag = is_product_taxonomy() || is_shop() ? 'h2' : 'h3';

        echo apply_filters( 'woocommerce_template_loop_product_title', '<' . $tag . ' class="woocommerce-loop-product__title">' . substr(strstr(get_the_title()," "), 1) . '</' . $tag . '>');
    }

    /**
     * Removes first word in WooCommerce product page product_title
     * @var $tag
     */
    function woocommerce_single_product_summary() {
        $tag = 'h1';

        echo apply_filters(woocommerce_single_product_summary, '<' . $tag . ' class="product_title entry-title">' . substr(strstr(get_the_title()," "), 1) . '</' . $tag . '>');
    }
}

Hopefully this works out for you, haven't tested it.