phpwordpresswoocommercehook-woocommerce

Add price beside Woocommerce Force Sells


Woocommerce Force Sells by default only lists the product titles. I need them to also show the product price in brackets beside each title. You can see it here like in this screenshot:

enter image description here

But it should be:

Is there a filter I can use so that Force Sells puts the prices beside items? Barring that, how can I alter the Force Sells code so that it also outputs price as well?

This is the part of the Force Sells code that outputs the items under the add to cart box on single product pages:

    /**
     * Displays information of what linked products that will get added when current
     * product is added to cart.
     */
    public function show_force_sell_products() {
        global $post;

        $product_ids = $this->get_force_sell_ids( $post->ID, array( 'normal', 'synced' ) );
        $titles      = array();

        // Make sure the products still exist and don't display duplicates.
        foreach( array_values( array_unique( $product_ids ) ) as $key => $product_id ) {
            $product = wc_get_product( $product_id );

            if ( $product && $product->exists() && 'trash' !== $product->get_status() ) {
                $titles[] = version_compare( WC_VERSION, '3.0', '>=' ) ? $product->get_title() : get_the_title( $product_id );
            }
        }

        if ( ! empty( $titles ) ) {
            echo '<div class="clear"></div>';
            echo '<div class="wc-force-sells">';
            echo '<p>' . __( 'This will also add the following products to your cart:', 'woocommerce-force-sells' ) . '</p>';
            echo '<ul>';

            foreach ( $titles as $title ) {
                echo '<li>' . $title . '</li>';
            }

            echo '</ul></div>';
        }
    }

Solution

  • You can try the following:

    add_filter( 'woocommerce_product_title', 'custom_product_title', 20, 2 );
    function custom_product_title( $name, $product ) {
        // Only in single product pages
        if( ! is_product() ) return $name;
    
        // The product name + the product formatted price
        return $name . ' (' . wc_price( wc_get_price_to_display( $product ) ) . ')';
    }
    

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