2016-11-22 24 views
1

私はwoocommerceを使用しています。私は製品として扱われなければならないカスタムポストタイプを作成し、ユーザはカートに追加することができます。私はこのチュートリアルに従いました http://reigelgallarde.me/programming/how-to-add-custom-post-type-to-woocommerce/ 私の価格フィールドのメタキーが "_price" であることを確認しましたが、動作しませんでした。私はwoocommerceカートにカスタムポストタイプを追加する

function reigel_woocommerce_get_price($price = null,$post = null){ 
if ($post->post->post_type === 'aytam'){ 
    $price = get_post_meta($post->id, "_price", true); 
    } 

return $price; 
} 
add_filter('woocommerce_get_price','reigel_woocommerce_get_price',20,1); 
add_action('init', 'reigel_woocommerce_get_price'); 

はすでにnot _priceあるメタ・キーを持っている場合は、あなたが示すwoocommerce_get_priceにフィルタを追加することができます

答えて

0

いずれも動作しませんでしたのfunctions.phpに、このコードを追加しようとしました

以下。最新バージョン3.0では

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); // your price meta key is price 
     return $price; 
    } 
+0

私のためには機能しませんでしたが、代わりにカスタム製品タイプを使用しました。あなたの助けてくれてありがとう: –

+0

最新バージョン3.0のように、私のために働かなかった。*たくさんのものが変更されました。それでも解決策を探しています。 –

1

* Woocommcerceは$post_type === 'product'あなたがフックを経由して、このファイルを含めるその後

class My_Product_Data_Store_CPT extends WC_Product_Data_Store_CPT implements WC_Object_Data_Store_Interface, WC_Product_Data_Store_Interface { 


    /** 
    * 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())) || 'product' !== $post_object->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); 
    } 


} 

にそれを上書きすることができますチェックし、ハードに使用。

function my_woocommerce_data_stores($stores) { 

    require_once PLUGIN_PATH . '/includes/classes/class-data-store-cpt.php'; 
    $stores['product'] = 'MY_Product_Data_Store_CPT'; 

    return $stores; 
} 

add_filter('woocommerce_data_stores', 'my_woocommerce_data_stores');使用するカスタムメタから価格を提供するために、このフィルタ。あなたはhttp://localhost/wordpress/cart/?add-to-cart=244ようなURLのPARAM add-to-cart=[POST_ID]を使用してカートに追加しようとした場合

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

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

今カートにアイテムを追加します。

ボタンを使用してカートに追加することもできます。

 <form action="" method="post"> 
      <input name="add-to-cart" type="hidden" value="<?php the_ID(); ?>" /> 
      <input name="quantity" type="number" value="1" min="1" /> 
      <input name="submit" type="submit" value="Add to cart" /> 
     </form> 
関連する問題