因此,我在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中只是空白。
以下是我的订单商品信息:
如果有帮助,我应该使用WooCommerce Custom Product Addons插件。
答案 0 :(得分:0)
您的代码中存在一些错误和遗漏,例如:
$order
自变量$post_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();