我正在尝试将收到的订单 URL 保存在管理区域“订单详细信息页面”中。
根据2年零7个月前发布的这篇文章,它应该可以工作,但我遵循了问题中描述的所有两个简单步骤,并且它没有在“订单详细信息页面”上显示任何带有已收到订单的URL的链接”或在“订单列表”上。
我不知道与 woocommerce 版本是否存在一些不兼容。不知道环境变量是否有变化。
任何人都可以指出我错在哪里吗?
提前谢谢你!
复制文章中描述的内容:.
第一步:@rur165
我们可以使用wc_get_endpoint_url函数来获取订单接收页面URL
要在我的帐户页面上的订单列表下显示此内容,您必须编辑模板 -
woocommerce/templates/my-account/orders.php.
在此模板中,第 1 行之后67 我用过这个代码
/* How to get order-received URL with key for each orders */
$order_received_url = wc_get_endpoint_url( 'order-received', $order->get_id(), wc_get_checkout_url() );
$order_received_url = add_query_arg( 'key', $order->get_order_key(), $order_received_url );
echo '<a href="' . esc_url( $order_received_url ) . '" class="woocommerce-button button">' . esc_html( "See order received" ) . '</a>';
这是整个页面:
<?php
/**
* Orders
*
* Shows orders on the account page.
*
* This template can be overridden by copying it to yourtheme/woocommerce/myaccount/orders.php.
*
* HOWEVER, on occasion WooCommerce will need to update template files and you
* (the theme developer) will need to copy the new files to your theme to
* maintain compatibility. We try to do this as little as possible, but it does
* happen. When this occurs the version of the template file will be bumped and
* the readme will list any important changes.
*
* @see https://docs.woocommerce.com/document/template-structure/
* @package WooCommerce\Templates
* @version 7.8.0
*/
defined( 'ABSPATH' ) || exit;
do_action( 'woocommerce_before_account_orders', $has_orders ); ?>
<?php if ( $has_orders ) : ?>
<table class="woocommerce-orders-table woocommerce-MyAccount-orders shop_table shop_table_responsive my_account_orders account-orders-table">
<thead>
<tr>
<?php foreach ( wc_get_account_orders_columns() as $column_id => $column_name ) : ?>
<th class="woocommerce-orders-table__header woocommerce-orders-table__header-<?php echo esc_attr( $column_id ); ?>"><span class="nobr"><?php echo esc_html( $column_name ); ?></span></th>
<?php endforeach; ?>
</tr>
</thead>
<tbody>
<?php
foreach ( $customer_orders->orders as $customer_order ) {
$order = wc_get_order( $customer_order ); // phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited
$item_count = $order->get_item_count() - $order->get_item_count_refunded();
?>
<tr class="woocommerce-orders-table__row woocommerce-orders-table__row--status-<?php echo esc_attr( $order->get_status() ); ?> order">
<?php foreach ( wc_get_account_orders_columns() as $column_id => $column_name ) : ?>
<td class="woocommerce-orders-table__cell woocommerce-orders-table__cell-<?php echo esc_attr( $column_id ); ?>" data-title="<?php echo esc_attr( $column_name ); ?>">
<?php if ( has_action( 'woocommerce_my_account_my_orders_column_' . $column_id ) ) : ?>
<?php do_action( 'woocommerce_my_account_my_orders_column_' . $column_id, $order ); ?>
<?php elseif ( 'order-number' === $column_id ) : ?>
<a href="<?php echo esc_url( $order->get_view_order_url() ); ?>">
<?php echo esc_html( _x( '#', 'hash before order number', 'woocommerce' ) . $order->get_order_number() ); ?>
</a>
<?php elseif ( 'order-date' === $column_id ) : ?>
<time datetime="<?php echo esc_attr( $order->get_date_created()->date( 'c' ) ); ?>"><?php echo esc_html( wc_format_datetime( $order->get_date_created() ) ); ?></time>
<?php elseif ( 'order-status' === $column_id ) : ?>
<?php echo esc_html( wc_get_order_status_name( $order->get_status() ) ); ?>
<?php elseif ( 'order-total' === $column_id ) : ?>
<?php
/* translators: 1: formatted order total 2: total order items */
echo wp_kses_post( sprintf( _n( '%1$s for %2$s item', '%1$s for %2$s items', $item_count, 'woocommerce' ), $order->get_formatted_order_total(), $item_count ) );
?>
<?php elseif ( 'order-actions' === $column_id ) : ?>
<?php
$actions = wc_get_account_orders_actions( $order );
/* Line N° 67 - How to get order-received URL with key for each orders */
$order_received_url = wc_get_endpoint_url( 'order-received', $order->get_id(), wc_get_checkout_url() );
$order_received_url = add_query_arg( 'key', $order->get_order_key(), $order_received_url );
echo '<a href="' . esc_url( $order_received_url ) . '" class="woocommerce-button button">' . esc_html( "See order received" ) . '</a>';
if ( ! empty( $actions ) ) {
foreach ( $actions as $key => $action ) { // phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited
echo '<a href="' . esc_url( $action['url'] ) . '" class="woocommerce-button' . esc_attr( $wp_button_class ) . ' button ' . sanitize_html_class( $key ) . '">' . esc_html( $action['name'] ) . '</a>';
}
}
?>
<?php endif; ?>
</td>
<?php endforeach; ?>
</tr>
<?php
}
?>
</tbody>
</table>
<?php do_action( 'woocommerce_before_account_orders_pagination' ); ?>
<?php if ( 1 < $customer_orders->max_num_pages ) : ?>
<div class="woocommerce-pagination woocommerce-pagination--without-numbers woocommerce-Pagination">
<?php if ( 1 !== $current_page ) : ?>
<a class="woocommerce-button woocommerce-button--previous woocommerce-Button woocommerce-Button--previous button<?php echo esc_attr( $wp_button_class ); ?>" href="<?php echo esc_url( wc_get_endpoint_url( 'orders', $current_page - 1 ) ); ?>"><?php esc_html_e( 'Previous', 'woocommerce' ); ?></a>
<?php endif; ?>
<?php if ( intval( $customer_orders->max_num_pages ) !== $current_page ) : ?>
<a class="woocommerce-button woocommerce-button--next woocommerce-Button woocommerce-Button--next button<?php echo esc_attr( $wp_button_class ); ?>" href="<?php echo esc_url( wc_get_endpoint_url( 'orders', $current_page + 1 ) ); ?>"><?php esc_html_e( 'Next', 'woocommerce' ); ?></a>
<?php endif; ?>
</div>
<?php endif; ?>
<?php else : ?>
<?php wc_print_notice( esc_html__( 'No order has been made yet.', 'woocommerce' ) . ' <a class="woocommerce-Button button' . esc_attr( $wp_button_class ) . '" href="' . esc_url( apply_filters( 'woocommerce_return_to_shop_redirect', wc_get_page_permalink( 'shop' ) ) ) . '">' . esc_html__( 'Browse products', 'woocommerce' ) . '</a>', 'notice' ); // phpcs:ignore WooCommerce.Commenting.CommentHooks.MissingHookComment ?>
<?php endif; ?>
<?php do_action( 'woocommerce_after_account_orders', $has_orders ); ?>
第 2 步:@hemant-ahir
嘿,是的,我做到了。我希望下面的代码可以帮助别人!
// Add New column inside order table
add_filter( 'woocommerce_account_orders_columns', 'ahir_add_account_orders_column', 10, 1 );
function ahir_add_account_orders_column( $columns ){
$columns['custom-column'] = __( 'Order Link', 'woocommerce' );
return $columns;
}
// Add click here button
add_action( 'woocommerce_my_account_my_orders_column_custom-column', 'ahir_add_account_orders_column_rows' );
function ahir_add_account_orders_column_rows( $order ) {
// Example with a custom field
$link_address = $order->get_checkout_order_received_url();
echo "<a class='woocommerce-button button view' href='$link_address'>Click here</a>";
}
要获取订单接收 URL(带有订单 ID 和订单密钥),只需使用以下方法(来自 WC_Order 对象):
$order = wc_get_order( $order_id ); // If needed (get the WC_Order Object)
$order_received_url = $order->get_checkout_order_received_url();
现在要在管理订单列表中添加一个带有该订单接收网址的按钮,请尝试:
/ Adding a custom comumn
add_filter( 'manage_edit-shop_order_columns', 'add_thankyou_url_column' );
function add_thankyou_url_column($columns) {
$columns['thankyou_url'] = __('Order link', 'woocommerce');
return $columns;
}
// The column content by row
add_action( 'manage_shop_order_posts_custom_column' , 'add_thankyou_url_column_content', 10, 2 );
function add_thankyou_url_column_content( $column, $post_id ) {
if ( 'thankyou_url' === $column ) {
global $the_order;
printf('<p><a class="button thankyou_url" href="%s" target="_blank">%s</a></p>',
$the_order->get_checkout_order_received_url(),
__("Click here", "woocommerce")
);
}
}
代码位于子主题的functions.php文件中(或插件中)。已测试并有效。
您将得到: