Home > Blockchain >  I can't purchase my custom product type in WordPress
I can't purchase my custom product type in WordPress

Time:02-01

I'm developing a plugin for custom product type. Here's my class that is being registered on plugins_loaded hook:

        class WC_Product_Subscription extends WC_Product {

            public function __construct( $product ) {
                $this->product_type = 'subscription';
                $this->purchasable = true;
                $this->downloadable = false;
                $this->virtual = true;
                $this->sold_individually = true;
                $this->manage_stock = false;
                $this->supports[]   = 'ajax_add_to_cart';
                parent::__construct( $product );
            }

            public function is_purchasable() {
                return true;
            }

        }

The problem is that I cannot see "Add to Cart" button on the product page which means my product cannot be purchased. I tried adding

            public function add_to_cart_url() {
                return apply_filters( 'woocommerce_product_add_to_cart_url', get_permalink( $this->get_id() ), $this );
            }

            public function add_to_cart_text() {
                $text = $this->is_purchasable() && $this->is_in_stock() ? __( 'Add to cart', 'woocommerce' ) : __( 'Read more', 'woocommerce' );
                return apply_filters( 'woocommerce_product_add_to_cart_text', $text, $this );
            }

to the class but without success. I'm stuck.

CodePudding user response:

It appears there are some missing steps to make your custom product type work.

Try the steps below:

#1. Make sure that your plugin is active.

#2. Make sure the product is in stock and has a price set. WooCommerce checks both of these conditions before displaying the Add to Cart button.

#3. Check if the custom product type is registered correctly. Use the following code to check:

add_action( 'init', 'check_registered_product_types' );
function check_registered_product_types() {
    $product_types = wc_get_product_types();
    var_dump( $product_types );
}

#4. Make sure that the WooCommerce product type is supported. Use the following code to check:

add_filter( 'product_type_selector', 'custom_product_type_selector' );
function custom_product_type_selector( $product_types ) {
    var_dump( $product_types );
    return $product_types;
}

#5. Make sure that the product class is correctly loaded. Use the following code to check:

add_action( 'plugins_loaded', 'check_product_class' );
function check_product_class() {
    $product_class = 'WC_Product_Subscription';
    var_dump( class_exists( $product_class ) );
}

#6. Ensure you have a product template for your custom product type in your theme's WooCommerce folder (e.g. single-product-subscription.php).

#7. If everything else seems to be working, you might have to override the WooCommerce templates to display the Add to Cart button.

Edit:

You can create a template in your plugin directory by using the following code:

add_filter( 'woocommerce_locate_template', 'wc_subscription_template', 10, 3 );
function wc_subscription_template( $template, $template_name, $template_path ) {
    if ( 'single-product-subscription.php' === $template_name ) {
        $template = untrailingslashit( plugin_dir_path( __FILE__ ) ) . '/templates/single-product-subscription.php';
    }
    return $template;
}

This will tell WooCommerce to use your custom template in the templates folder within your plugin directory. Make sure you put the code in a file that is included in your plugin, so it will run when the plugin is activated.

  • Related