摆脱WooCommerce我的账户 - 订单页面中的订单状态

时间:2016-09-21 17:08:40

标签: php wordpress templates woocommerce orders

我想隐藏My Accounts - Orders 中的状态列(显示处理,退款等等)

有谁知道我怎么能这样做?

以下是显示帐户状态列的屏幕截图:

Here is the image showing the account status

感谢。

以下是我文件中的代码(my-orders.php

<?php
/**
 * My Orders
 *
 * Shows recent orders on the account page.
 *
 * This template can be overridden by copying it to yourtheme/woocommerce/myaccount/my-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     http://docs.woothemes.com/document/template-structure/
 * @author  WooThemes
 * @package WooCommerce/Templates
 * @version 2.5.0
 */

if ( ! defined( 'ABSPATH' ) ) {
    exit;
}

$my_orders_columns = apply_filters( 'woocommerce_my_account_my_orders_columns', array(
    'order-number'  => __( 'Order', 'woocommerce' ),
    'order-date'    => __( 'Date', 'woocommerce' ),
    'order-status'  => __( 'Status', 'woocommerce' ),
    'order-total'   => __( 'Total', 'woocommerce' ),
    'order-actions' => '&nbsp;',
) );

$customer_orders = get_posts( apply_filters( 'woocommerce_my_account_my_orders_query', array(
    'numberposts' => $order_count,
    'meta_key'    => '_customer_user',
    'meta_value'  => get_current_user_id(),
    'post_type'   => wc_get_order_types( 'view-orders' ),
    'post_status' => array_keys( wc_get_order_statuses() )
) ) );


/**
 * This is the entire "Recent Orders" section below my subscriptions. It has been commented out
 *
if ( $customer_orders ) : ?>

    <h2><?php echo apply_filters( 'woocommerce_my_account_my_orders_title', __( 'Recent Orders', 'woocommerce' ) ); ?></h2>

    <table class="shop_table shop_table_responsive my_account_orders">

        <thead>
            <tr>
                <?php foreach ( $my_orders_columns as $column_id => $column_name ) : ?>
                    <th class="<?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 as $customer_order ) :
                $order      = wc_get_order( $customer_order );
                $item_count = $order->get_item_count();
                ?>
                <tr class="order">
                    <?php foreach ( $my_orders_columns as $column_id => $column_name ) : ?>
                        <td class="<?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 _x( '#', 'hash before order number', 'woocommerce' ) . $order->get_order_number(); ?>
                                </a>

                            <?php elseif ( 'order-date' === $column_id ) : ?>
                                <time datetime="<?php echo date( 'Y-m-d', strtotime( $order->order_date ) ); ?>" title="<?php echo esc_attr( strtotime( $order->order_date ) ); ?>"><?php echo date_i18n( get_option( 'date_format' ), strtotime( $order->order_date ) ); ?></time>

                            <?php elseif ( 'order-status' === $column_id ) : ?>
                                <?php echo wc_get_order_status_name( $order->get_status() ); ?>

                            <?php elseif ( 'order-total' === $column_id ) : ?>
                                <?php echo sprintf( _n( '%s for %s item', '%s for %s items', $item_count, 'woocommerce' ), $order->get_formatted_order_total(), $item_count ); ?>

                            <?php elseif ( 'order-actions' === $column_id ) : ?>
                                <?php
                                    $actions = array(
                                        'pay'    => array(
                                            'url'  => $order->get_checkout_payment_url(),
                                            'name' => __( 'Pay', 'woocommerce' )
                                        ),
                                        'view'   => array(
                                            'url'  => $order->get_view_order_url(),
                                            'name' => __( 'View', 'woocommerce' )
                                        ),
                                        'cancel' => array(
                                            'url'  => $order->get_cancel_order_url( wc_get_page_permalink( 'myaccount' ) ),
                                            'name' => __( 'Cancel', 'woocommerce' )
                                        )
                                    );

                                    if ( ! $order->needs_payment() ) {
                                        unset( $actions['pay'] );
                                    }

                                    if ( ! in_array( $order->get_status(), apply_filters( 'woocommerce_valid_order_statuses_for_cancel', array( 'pending', 'failed' ), $order ) ) ) {
                                        unset( $actions['cancel'] );
                                    }

                                    if ( $actions = apply_filters( 'woocommerce_my_account_my_orders_actions', $actions, $order ) ) {
                                        foreach ( $actions as $key => $action ) {
                                            echo '<a href="' . esc_url( $action['url'] ) . '" class="button ' . sanitize_html_class( $key ) . '">' . esc_html( $action['name'] ) . '</a>';
                                        }
                                    }
                                ?>
                            <?php endif; ?>
                        </td>
                    <?php endforeach; ?>
                </tr>
            <?php endforeach; ?>
        </tbody>
    </table>
<?php endif; ?>

**/

2 个答案:

答案 0 :(得分:4)

您需要通过有效主题覆盖 String.Format(Resource_en.PhoneNumberForEmployeeAlreadyExist,letterForm.EmployeeName[i]) WooCommerce。

为此,如果没有这样做,您需要将 myaccount/orders.php 插件文件夹,一个名为 woocommerce 的子文件夹复制到您的活跃孩子主题(或主题)并重命名 templates (请参阅this related docs

之后,您会在 woocommerce 子文件夹中的新 woocommerce 文件夹中找到一个名为 myaccount的模板

打开/修改 orders.php 模板并替换代码:

orders.php

保存,你完成了。此代码已经过测试并正常运行。

对于以前版本的woocommerce 2.5.x,

更新:,模板文件名为 <?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/ * @author WooThemes * @package WooCommerce/Templates * @version 2.6.0 */ if ( ! defined( 'ABSPATH' ) ) { exit; } do_action( 'woocommerce_before_account_orders', $has_orders ); ?> <?php if ( $has_orders ) : ?> <table class="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 ) : if( $column_name != 'Status' ){ // added this line ?> <th class="<?php echo esc_attr( $column_id ); ?>"><span class="nobr"><?php echo esc_html( $column_name ); ?></span></th> <?php } // and this too endforeach; ?> </tr> </thead> <tbody> <?php foreach ( $customer_orders->orders as $customer_order ) : $order = wc_get_order( $customer_order ); $item_count = $order->get_item_count(); ?> <tr class="order"> <?php foreach ( wc_get_account_orders_columns() as $column_id => $column_name ) : if( $column_name != 'Status' ){ // added this line ?> <td class="<?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 _x( '#', 'hash before order number', 'woocommerce' ) . $order->get_order_number(); ?> </a> <?php elseif ( 'order-date' === $column_id ) : ?> <time datetime="<?php echo date( 'Y-m-d', strtotime( $order->order_date ) ); ?>" title="<?php echo esc_attr( strtotime( $order->order_date ) ); ?>"><?php echo date_i18n( get_option( 'date_format' ), strtotime( $order->order_date ) ); ?></time> <?php elseif ( 'order-status' === $column_id ) : ?> <?php echo wc_get_order_status_name( $order->get_status() ); ?> <?php elseif ( 'order-total' === $column_id ) : ?> <?php echo sprintf( _n( '%s for %s item', '%s for %s items', $item_count, 'woocommerce' ), $order->get_formatted_order_total(), $item_count ); ?> <?php elseif ( 'order-actions' === $column_id ) : ?> <?php $actions = array( 'pay' => array( 'url' => $order->get_checkout_payment_url(), 'name' => __( 'Pay', 'woocommerce' ) ), 'view' => array( 'url' => $order->get_view_order_url(), 'name' => __( 'View', 'woocommerce' ) ), 'cancel' => array( 'url' => $order->get_cancel_order_url( wc_get_page_permalink( 'myaccount' ) ), 'name' => __( 'Cancel', 'woocommerce' ) ) ); if ( ! $order->needs_payment() ) { unset( $actions['pay'] ); } if ( ! in_array( $order->get_status(), apply_filters( 'woocommerce_valid_order_statuses_for_cancel', array( 'pending', 'failed' ), $order ) ) ) { unset( $actions['cancel'] ); } if ( $actions = apply_filters( 'woocommerce_my_account_my_orders_actions', $actions, $order ) ) { foreach ( $actions as $key => $action ) { echo '<a href="' . esc_url( $action['url'] ) . '" class="button ' . sanitize_html_class( $key ) . '">' . esc_html( $action['name'] ) . '</a>'; } } ?> <?php endif; ?> </td> <?php } // added this too endforeach; ?> </tr> <?php endforeach; ?> </tbody> </table> <?php do_action( 'woocommerce_before_account_orders_pagination' ); ?> <?php if ( 1 < $customer_orders->max_num_pages ) : ?> <div class="woocommerce-Pagination"> <?php if ( 1 !== $current_page ) : ?> <a class="woocommerce-Button woocommerce-Button--previous button" href="<?php echo esc_url( wc_get_endpoint_url( 'orders', $current_page - 1 ) ); ?>"><?php _e( 'Previous', 'woocommerce' ); ?></a> <?php endif; ?> <?php if ( $current_page !== intval( $customer_orders->max_num_pages ) ) : ?> <a class="woocommerce-Button woocommerce-Button--next button" href="<?php echo esc_url( wc_get_endpoint_url( 'orders', $current_page + 1 ) ); ?>"><?php _e( 'Next', 'woocommerce' ); ?></a> <?php endif; ?> </div> <?php endif; ?> <?php else : ?> <div class="woocommerce-Message woocommerce-Message--info woocommerce-info"> <a class="woocommerce-Button button" href="<?php echo esc_url( apply_filters( 'woocommerce_return_to_shop_redirect', wc_get_page_permalink( 'shop' ) ) ); ?>"> <?php _e( 'Go Shop', 'woocommerce' ) ?> </a> <?php _e( 'No order has been made yet.', 'woocommerce' ); ?> </div> <?php endif; ?> <?php do_action( 'woocommerce_after_account_orders', $has_orders ); ?> ,您只需在模板代码中注释一行:

my-orders.php

以下是此模板的摘录,代码中带有注释行:

    // 'order-status'  => __( 'Status', 'woocommerce' ), 

参考:Template Structure + Overriding Templates via a Theme

答案 1 :(得分:2)

最简单的方法可能只是通过CSS隐藏该列 - 如果该列具有唯一ID或者TD具有可以使用display:none定位的类,则可能会照顾到您的内容需要。

或者,您也可以通过挂钩woocommerce_my_account_my_orders_columns过滤器来隐藏它。

像这样(未经测试)

add_filter('woocommerce_my_account_my_orders_columns', 'my_custom_function_name', 10);

function my_custom_function_name($order){
  unset($order['order-status']);
  return $order;
}

我确信确切的代码不起作用,但我敢打赌它会让你非常接近。