wordpress 在Woocommerce中添加自定义文章类型/文章

r1zk6ea1  于 12个月前  发布在  WordPress
关注(0)|答案(4)|浏览(219)

我有一个个人主题“A”,我想它也可以没有Woocommerce工作。当**Woocommerce“WC”**插件添加我会与WC产品集成。我有一个自定义的文章类型称为“对象”,我如何才能使“对象”可购买的正确WC?

  • 我已经在StackOverflow Adding Custom Post Types to Woocommerce上看到了这个答案,最终的解决方案提供了一个免费的(不再)插件来解决。
  • 我更喜欢自己做这件事,没有插件的帮助。我很好奇,一个预打包的解决方案不是我所寻找的。*
bqjvbblv

bqjvbblv1#

我有created a simple tutorial,在这里添加它会太长。
为了实现你的目标,你的文章类型必须有一个价格。也就是说,价格的自定义字段应该有一个Meta键_price
如果您已经有一个不是_price Meta键,您可以添加一个过滤器到woocommerce_get_price,如下所示。

add_filter('woocommerce_get_price','reigel_woocommerce_get_price',20,2);
function reigel_woocommerce_get_price($price,$post){
    if ($post->post->post_type === 'post') // change this to your post type
        $price = get_post_meta($post->id, "price", true); // assuming your price meta key is price
    return $price;
}

字符串
有了这个,你现在可以添加任何帖子到购物车中。就像http://localhost/wordpress/cart/?add-to-cart=1一样,其中1是帖子类型中的帖子ID。
访问该链接后的示例结果图像:


的数据
现在,你必须设置一个像下面这样的表单。

<form action="" method="post">
    <input name="add-to-cart" type="hidden" value="<?php echo $post->ID ?>" />
    <input name="quantity" type="number" value="1" min="1"  />
    <input name="submit" type="submit" value="Add to cart" />
</form>


你需要有这个来获得“添加到购物车”按钮。输入的名称必须是原样。

bvhaajcl

bvhaajcl2#

我们可以尝试一个简单的事情..你想要一个自定义的帖子类型来存储您的产品,当WooCommerce集成在您的自定义帖子类型中添加的产品可以作为WooCommerce产品。
1.检查woocommerce是否已安装。
1.如果没有,那么创建一个自定义的帖子类型为“product”(类似于woocommerce)。
1.添加类似于Woocommerce的自定义字段,并在其下添加产品。(为Woocommerce的自定义字段添加的图像)
1.现在,在自定义文章类型下添加产品,当woocommerce将被添加时,它将面临自定义文章类型已经存在的问题。
1.因此,如果将来您想将WooCommerce添加到您的网站,请禁用register_post_Type功能并安装WooCommerce。
1.在自定义文章类型中创建的所有产品都将在Woocommerce产品选项中可见
要检查woocommerce是否处于活动状态,请使用此代码

<?php
    if ( class_exists( 'WooCommerce' ) ) {
      // code that requires WooCommerce
    } else {
      // you don't appear to have WooCommerce activated
    }
    ?>

字符串


的数据

0sgqnhkj

0sgqnhkj3#

I'm selling a plugin that would enable to use Custom Post Type as "product" of WooCommerce .我做了很多工作,使其与WooCommerce 3.0兼容
但这是最重要的部分。
你必须创建自己的数据存储,像这样:
首先创建一个扩展到WC_Product_Data_Store_CPT的类。这个想法是覆盖这个类的现有功能,检查post类型。我发现readget_product_type进行检查。

class WCCPT_Product_Data_Store_CPT extends WC_Product_Data_Store_CPT {

    /**
     * Method to read a product from the database.
     * @param WC_Product
     */

    public function read( &$product ) {

        $product->set_defaults();

        if ( ! $product->get_id() || ! ( $post_object = get_post( $product->get_id() ) ) || ! in_array( $post_object->post_type, array( 'birds', 'product' ) ) ) { // change birds with your post type
            throw new Exception( __( 'Invalid product.', 'woocommerce' ) );
        }

        $id = $product->get_id();

        $product->set_props( array(
            'name'              => $post_object->post_title,
            'slug'              => $post_object->post_name,
            'date_created'      => 0 < $post_object->post_date_gmt ? wc_string_to_timestamp( $post_object->post_date_gmt ) : null,
            'date_modified'     => 0 < $post_object->post_modified_gmt ? wc_string_to_timestamp( $post_object->post_modified_gmt ) : null,
            'status'            => $post_object->post_status,
            'description'       => $post_object->post_content,
            'short_description' => $post_object->post_excerpt,
            'parent_id'         => $post_object->post_parent,
            'menu_order'        => $post_object->menu_order,
            'reviews_allowed'   => 'open' === $post_object->comment_status,
        ) );

        $this->read_attributes( $product );
        $this->read_downloads( $product );
        $this->read_visibility( $product );
        $this->read_product_data( $product );
        $this->read_extra_data( $product );
        $product->set_object_read( true );
    }

    /**
     * Get the product type based on product ID.
     *
     * @since 3.0.0
     * @param int $product_id
     * @return bool|string
     */
    public function get_product_type( $product_id ) {
        $post_type = get_post_type( $product_id );
        if ( 'product_variation' === $post_type ) {
            return 'variation';
        } elseif ( in_array( $post_type, array( 'birds', 'product' ) ) ) { // change birds with your post type
            $terms = get_the_terms( $product_id, 'product_type' );
            return ! empty( $terms ) ? sanitize_title( current( $terms )->name ) : 'simple';
        } else {
            return false;
        }
    }
}

字符串
之后,添加一个过滤器到woocommerce_data_stores并使用你的类。

add_filter( 'woocommerce_data_stores', 'woocommerce_data_stores' );

function woocommerce_data_stores ( $stores ) {      
    $stores['product'] = 'WCCPT_Product_Data_Store_CPT';
    return $stores;
}


这样,你就可以添加一个birds类型的文章到购物车。但是实际上不会成功添加到购物车。因为没有价格,购物车会拒绝它。


的数据
为了解决这个问题,你需要另一个过滤器。下面是一个简单的方法添加价格。

add_filter('woocommerce_product_get_price', 'woocommerce_product_get_price', 10, 2 );
function woocommerce_product_get_price( $price, $product ) {

    if ($product->get_id() == 815 ) {
        $price = 10;        
    }
    return $price;
}


完成后,您将成功添加到购物车。


sbtkgmzw

sbtkgmzw4#

我也面临着同样的问题。花了几天时间,我想出了它应该如何工作和它的解决方案。
在这里我做了什么
1.保持价格Meta为_price为我的自定义职位
1.将类woocommerce/includes/class-wc-product-factory.php的函数get_product_class中的if条件修改为:
之前

if ( 'product' === $post_type){

字符串

if ( 'product' === $post_type || 'packages' === $post_type ){


一切都很完美。
现在我想用一些过滤方法来改变这个产品类型。有人能告诉我吗?

if ( 'product' === $post_type || 'packages' === $post_type ){

相关问题