当前位置: 首页 > 知识库问答 >
问题:

Woocommerce在添加新产品之前删除购物车

邢承弼
2023-03-14
$woocommerce->cart->add_to_cart( $product_ID, $quantity=1 )

我的产品创建:

function customcart() {

  if (isset($_POST["addcustomcarts"])) {

    global $woocommerce;
    $my_post = array(
      'post_title'    => 'Design selv skilt',
      'post_content'  => '<div class="col-md-12">Dette er et design selv skilt, tjek egenskaber på produktet for at se hvad kunden har bestilt.</div>',
      'post_status'   => 'publish',
      'post_author'   => 1,
      'post_type'     => 'product'
    );

    // Insert the post into the database
    $product_ID = wp_insert_post( $my_post );

    $filteredData=substr($_POST['img_val'], strpos($_POST['img_val'], ",")+1);

    //Decode the string
    $unencodedData=base64_decode($filteredData);

    //Save the image
    file_put_contents('img' . $product_ID . '.png', $unencodedData);

    if ( $product_ID ){
      wp_set_object_terms( $product_ID, 'design-selv-skilte', 'product_cat' );
      add_post_meta($product_ID, '_regular_price', $_POST["priceInput"] );
      add_post_meta($product_ID, '_price', $_POST["priceInput"] );
      add_post_meta($product_ID, '_stock_status', 'instock' );
      //add_post_meta($product_ID, '_manage_stock', 'yes' );    
      //add_post_meta($product_ID, '_stock', '10' ); 
      add_post_meta($product_ID, '_sku', 'designselvskilt-' . $product_ID );   
      add_post_meta($product_ID, '_visibility', 'hidden' );
      add_post_meta($product_ID, 'tekst-paa-linje-1', $_POST["textInput"] );
      add_post_meta($product_ID, 'tekst-paa-linje-2', $_POST["text2Input"] );
      add_post_meta($product_ID, 'stoerrelse', $_POST["størrelseInput"] );
      add_post_meta($product_ID, 'form', $_POST["formInput"] );
      add_post_meta($product_ID, 'farve', $_POST["farveInput"] );
      add_post_meta($product_ID, 'type-skilt', $_POST["typeInput"] );
      add_post_meta($product_ID, 'fastgoering', $_POST["fastgøringInput"] );
      add_post_meta($product_ID, 'font', $_POST["fontInput"] );
      add_post_meta($product_ID, 'linje-1-font-size', $_POST["fontSizeLine1Input"] );
      add_post_meta($product_ID, 'linje-2-font-size', $_POST["fontSizeLine2Input"] );
      add_post_meta($product_ID, 'product_image_gallery', $_POST["img_val"]);
      add_post_meta($product_ID, 'product_image_url', 'img' . $product_ID . '.png');  
      require_once(ABSPATH . 'wp-admin/includes/media.php');
      require_once(ABSPATH . 'wp-admin/includes/file.php');
      require_once(ABSPATH . 'wp-admin/includes/image.php');
      $home = home_url();
      $url = $home . '/img' . $product_ID . '.png';
      $post_id = $product_ID;
      $desc = $_POST["textInput"];
      $image = media_sideload_image($url, $post_id, $desc, src );

              function getImageId( $image ) {
            // Split the $url into two parts with the wp-content directory as the separator
            $parsed_url  = explode( parse_url( WP_CONTENT_URL, PHP_URL_PATH ), $image );

            // Get the host of the current site and the host of the $url, ignoring www
            $this_host = str_ireplace( 'www.', '', parse_url( home_url(), PHP_URL_HOST ) );
            $file_host = str_ireplace( 'www.', '', parse_url( $image, PHP_URL_HOST ) );

            // Return nothing if there aren't any $url parts or if the current host and $url host do not match
            if ( ! isset( $parsed_url[1] ) || empty( $parsed_url[1] ) || ( $this_host != $file_host ) ) {
                return;
            }

            // Now we're going to quickly search the DB for any attachment GUID with a partial path match
            // Example: /uploads/2013/05/test-image.jpg
            global $wpdb;

            $attachment = $wpdb->get_col( $wpdb->prepare( "SELECT ID FROM {$wpdb->prefix}posts WHERE guid RLIKE %s;", $parsed_url[1] ) );

            // Returns null if no attachment is found
            return $attachment[0];
        }    

      set_post_thumbnail($post_id, getImageId( $image ));    

      $woocommerce->cart->add_to_cart( $product_ID, $quantity=1 );

       wp_redirect( '/kurv' ); exit;

    }
  }

}

共有1个答案

欧君之
2023-03-14

似乎您并不是唯一一个发现需要首先初始化购物车才能从中获得一致和预期的行为的人:

  • 如何正确初始化Woocommerce购物车

我建议你考虑加入以下内容:

$woocommerce->session->set_customer_session_cookie(true);
$woocommerce->cart->add_to_cart( $product_ID, $quantity=1 );
$woocommerce->cart->add_to_cart( $product_ID, TRUE );

你的意思是:

$woocommerce->cart->add_to_cart( $product_ID, 1 );

但是,我的猜测是,您使用了方法签名,该签名表明第二个参数是可选的,并且如果省略,则默认值为整数1,在这种情况下,您可以使用以下命令使其更简单:

$woocommerce->cart->add_to_cart( $product_ID );

如果只想传递变量,则需要如下所示

$quantity = 1;
// ... any other code
$woocommerce->cart->add_to_cart( $product_ID, $quantity );
 类似资料:
  • 正如doublesharp所指出的那样,在解释问题上还有另一个问题,这并不是很清楚。 Joe点击一个产品,然后选择产品表单上的各种选项,然后在点击“添加到购物车”按钮之后,但在将其添加到购物车之前,计算自定义成本。 这些选项需要完全自定义,因为所涉及的计算超出了woocommerce“可变产品”的范围。我试图实现的是,客户能够添加同一产品的多个实例,并与之相关的各种成本和信息。

  • 我经营一家Woocommerce商店,该商店也提供免费产品(_常规价格=0)。客户必须选择数量并将其添加到购物车中,然后下订单才能收到产品。但这并不是Woocommerce的工作原理,它隐藏了所有价格为0的产品的“添加到购物车”链接。并且不会在购物车页面中显示它们。有没有解决这个问题的办法?非常感谢。

  • 你在为它做什么?我在文件末尾(wp-content/plugins/woocommerce/woocommerce.php)写了这个字符串: 但当我从购物车中删除项目时,它就不起作用了! 但也不起作用

  • 我正在重写AJAX函数,以便使用WooCommerce添加产品,这样我也可以将属性发送到购物车(这不是开箱即用的)。 在通过AJAX添加变量产品后,我按照更新WooCommerce购物车的说明进行了操作——这正是我想要的——但它并不完全有效。 当我注销时,一切都很好。但是,当我登录Wordpress时,PHP覆盖不起作用/被忽略。我没有收到任何错误,也没有向购物车添加任何产品。我尝试了许多不同的方

  • 最初,我选择了一个包(Woo订阅) 然后添加了所有详细信息。 但未提交。 回到网站,所以再次购买我需要选择一个包。所以我选择了这个包,并填写了详细信息,然后转到付款包。 现在在我的购物车中,两个包都存在(即我没有第一次购买就选择的包和最近的包) 如何修复此问题,使最新选定的一个在购物车中,而较早的一个在选定最新的一个后立即删除。 我尝试了这个Woocommerce从购物车中删除所有产品,并将当前产