删除wordpress中的订单行项目

时间:2016-08-02 11:07:07

标签: php wordpress plugins woocommerce

我在wordpress&中使用woocommerce插件并将其放在/home/builhsqv/public_html/test/wp-contents/plugins/位置。现在我在/home/builhsqv/public_html/test/test.php创建了一个php文件。在此文件中,我编写了代码以删除单个订单行项目。

<strong>
//TEST.PHP
<?php   
error_reporting(E_ALL );
require_once( dirname(__FILE__)."/wp-content/plugins/woocommerce/includes/wc-order-functions.php");
echo "Woocommerce";
$itemID = 1234;
echo $result = wc_delete_order_item($itemID);
print_r($result);  die;
?>

//wc-order-functions.php (File of woocommerce with function body)
<?php
function wc_delete_order_item( $item_id ) {
    global $wpdb;
    $item_id = absint( $item_id );
    if ( ! $item_id )
        return false;
    do_action( 'woocommerce_before_delete_order_item', $item_id );
    $wpdb->query( $wpdb->prepare( "DELETE FROM {$wpdb->prefix}woocommerce_order_items WHERE order_item_id = %d", $item_id ) );
    $wpdb->query( $wpdb->prepare( "DELETE FROM {$wpdb->prefix}woocommerce_order_itemmeta WHERE order_item_id = %d", $item_id ) );
    do_action( 'woocommerce_delete_order_item', $item_id );
    return true;
}
?>
</strong>

当我在浏览器中运行此文件时,它显示一个空白页面。 但是当我评论require路径和调用函数时,我可以看到echo消息。

我想使用woocommerce中的PHP脚本删除订单行项目。

2 个答案:

答案 0 :(得分:0)

您可能会在WooCommerce中找到此文件,需要插件中的其他人和WordPress本身删除订单项。

虽然我不确定为什么要使用1个订单的1个订单项的脚本来做这个,这可以通过CMS或数据库完成,但要使用WooCommerce帮助函数复制index.php,并更改{{1 }} WP_USE_THEMES就像这样。

false

只要您存储在WordPress安装的根目录中,这将实现您的目标。

我偶然发现了这个想要删除所有与订单ID相关的项目而没有直接查询数据库,这在挖掘了WooCommerce代码之后为其他人寻找相同的结果

<?php
/**
 * Front to the WordPress application. This file doesn't do anything, but loads
 * wp-blog-header.php which does and tells WordPress to load the theme.
 *
 * @package WordPress
 */

/**
 * Tells WordPress to load the WordPress theme and output it.
 *
 * @var bool
 */
define('WP_USE_THEMES', false);

/** Loads the WordPress Environment and Template */
require( dirname( __FILE__ ) . '/wp-blog-header.php' );

/** Delete order line item 1234 */
$itemID = 1234;
$result = wc_delete_order_item($itemID);
echo "<pre>";
print_r($result);
echo "</pre>";

答案 1 :(得分:-1)

首先需要知道您的订单行ID。

我得到这样的话:

$ sql =&#39;选择&#39;
        。 &#39; woi.order_item_name,woim.meta_value,woim.order_item_id&#39;
        。 &#39;来自wp_woocommerce_order_items woi加入wp_woocommerce_order_itemmeta woim&#39;
        。 &#39;其中order_id =&#39; 。 $ order_id
        。 &#39;和woi.order_item_id = woim.order_item_id和woim。public static int CustomRound(double value) { int sign = Math.Sign(value); double absValue = Math.Abs(value); int absResult = (int)Math.Round(absValue - 0.01, 0, MidpointRounding.AwayFromZero); return absResult * sign; } = \&#39; _product_id \&#39;&#39;
        。 &#39; group by woi.order_item_name order by 3&#39;;

我将它们加载到表格中。当我想删除行时,我使用这个函数:

function order_delete_lines($ lines)
{
foreach($ line as $ line)
wc_delete_order_item($线);
}

雅各布