通过Woocommerce管理员订单中的自定义操作按钮使用订单商品元数据

时间:2019-09-04 13:55:35

标签: php wordpress woocommerce metadata orders

因此,我在woocommerce订单列表中创建了一个自定义操作按钮,但是我希望该按钮链接到一个页面,在该页面上我将打印出与该订单相关的信息。现在要做的是,我想将订单中的数据携带到要打印信息的页面。

因此,我使用以下代码在woocommerce订单列表中创建了自定义按钮:

add_action( 'woocommerce_admin_order_actions_end', 'add_content_to_wcactions_column' );
function add_content_to_wcactions_column() {

    // create some tooltip text to show on hover
    $tooltip = __('Print details', 'textdomain');

    // create a button label
    $label = __('P1', 'textdomain');

    $printurl = wc_get_order_item_meta($post_id, 'street-name', true);

    echo '<a class="button tips custom-class" href="/order-info/?orderid='.$printurl.'" data-tip="'.$tooltip.'" target="_blank">'.$label.'</a>';
}

该按钮链接到打印页面,该页面应带有订单“ street-name”元数据,但该元数据未显示,它在url中只是空白。

以下是我的订单商品信息:

enter image description here

如果有帮助,我应该使用WooCommerce Custom Product Addons插件。

2 个答案:

答案 0 :(得分:0)

您的代码中存在一些错误和遗漏,例如:

    挂钩函数中缺少
  • $order自变量
  • $post_id未定义。
  • 您需要先获取正确的商品ID ,才能使用wc_get_order_item_meta()功能

提醒:一个订单可以包含许多商品(产品)。

在下面的代码中,我们将获得第一订单项(假设street-name是正确的meta_key以获取自定义订单项元数据值)

add_action( 'woocommerce_admin_order_actions_end', 'admin_order_actions_custom_button' );
function admin_order_actions_custom_button( $order ) {

    // create some tooltip text to show on hover
    $tooltip = __('Print details', 'textdomain');

    // create a button label
    $label = __('P1', 'textdomain');

    // get order line items
    $order_items = $order->get_items();

    // get the first item
    $first_item  = reset( $order_items );

    // get 'street-name' order item custom meta data
    $print_url   = $first_item->get_meta('street-name'); // or: wc_get_order_item_meta($first_item->get_id(), 'street-name', true);

    echo '<a class="button tips custom-class" href="/order-info/?orderid='.$print_url.'" data-tip="'.$tooltip.'" target="_blank">'.$label.'</a>';
}

代码进入活动子主题(或活动主题)的functions.php文件中。应该可以。

答案 1 :(得分:0)

我不确定您是说街道名称是订单还是商品的元键,因此我在以下代码中涵盖了这两种情况,您可以删除与您无关的内容。

这是页面模板的示例,该模板将在查询字符串中获得订单ID,并显示一些信息。

要实现此目的,您需要在主题目录中创建一个php文件,您可以将其命名为“ template-order-info.php”并将其内容粘贴到其中。

然后,转到您的管理员并创建一个新页面,然后从选择框中将页面模板分配为“订单信息”(新文件)。

然后查看文件,并添加以下查询字符串:/?order = ####(替换为订单ID)。例如:www.mysite.com/orderinfo/?order=1001

    <?php
/* Template Name: Order Info */

$order_id = $_GET['order'];

# Some basic filtering for wrong order ID passed
if (!is_numeric($order_id)) wp_die('Invalid Order ID');

$order = new WC_Order($order_id);

if (!$order) wp_die('Invalid Order ID');

get_header();
    ?>

<h2>Order #<?php echo $order->get_id(); ?> Information</h2>

<ul>
    <li>Full Name: <?php echo $order->get_billing_first_name().' '.$order->get_billing_last_name(); ?> </li>
    <li>Street Name: <?php echo $order->get_meta('street-name'); ?></li>
    <li>Billing Address: <?php echo $order->get_billing_address_1(); ?></li>
    <li>Billing Address 2: <?php echo $order->get_billing_address_2(); ?></li>
    <li>
        <h3>Order Items:</h3>
        <ol>
            <?php foreach ($order->get_items() as $item){ 
                ?>
                <li><strong><?php echo $item->get_name(); ?></strong> - Street Name: <?php echo $item->get_meta('street-name');?></li>
            <?php } ?>
        </ol>
    </li>
</ul>


    <?php
get_footer();