Кнопка настраиваемого действия в настраиваемом столбце в списке заказов администратора WooCommerce - PullRequest
2 голосов
/ 10 января 2020

Сначала я создал пользовательский столбец.

  function add_example_column($columns) {
    $columns['EXAMPLE'] = 'EXAMPLE';
    return $columns;
  }

  add_filter( 'manage_edit-shop_order_columns', 'add_example_column' );

После этого я сделал новое действие.

 function example_action($actions) {
    $actions['example'] = array (
      'url'     => 'https://example.com?action=ups',
      'name'    => __( 'Some text', 'woocommerce' ),
      'action'  => 'example'
    );
    return $actions;
  }

 add_action( 'woocommerce_admin_order_actions', 'example_action', 10, 1 );

Затем я попытался поместить эту кнопку действия в пользовательский столбец.

  function example_barcode($column, $order_id) {
    $order = new WC_Order( $order_id );
    if ( $column == 'EXAMPLE') :
      if ( $order->has_status( array( 'processing' ) ) ) :
        echo '<style>.wc-action-button-ups::after { font-family: FontAwesome !important; content: "\f7e0" !important; }</style>';
      endif;
    endif;
  }

  add_action( 'manage_shop_order_posts_custom_column', 'example_barcode', 10, 2 );

По-прежнему безуспешно.

1 Ответ

2 голосов
/ 11 января 2020

В вашем коде есть ошибки. Чтобы добавить кнопку настраиваемого действия в дополнительный дополнительный столбец в списке заказов администратора, используйте следующее:

// Adding a custom comumn
add_filter( 'manage_edit-shop_order_columns', 'add_example_column' );
function add_example_column($columns) {
    $columns['ups'] = __('UPS', 'woocommerce');
    return $columns;
}

// The column content by row
add_action( 'manage_shop_order_posts_custom_column' , 'add_example_column_contents', 10, 2 );
function add_example_column_contents( $column, $post_id ) {
    if ( 'ups' === $column )
    {
        $order = wc_get_order( $post_id ); // Get the WC_Order instance Object

        // Targetting processing orders only
        if ( $order->has_status( 'processing' ) )
        {
            $slug = 'ups';
            $url  = '?action=ups&order_id=' . $post_id; // The order Id is required in the URL

            // Output the button
            echo '<p><a class="button wc-action-button wc-action-button'.$slug.' '.$slug.'" href="'.$url.'" aria-label="'.$slug.'"> </a></p>';
        }
    }
}

// The CSS styling
add_action( 'admin_head', 'add_custom_action_button_css' );
function add_custom_action_button_css() {
    $action_slug = "ups";

    echo '<style>.wc-action-button-'.$action_slug.'::after { font-family: woocommerce !important; content: "\e029" !important; }</style>';
}

Но вы не получите функцию всплывающей подсказки, как в столбце действий WooCommerce по умолчанию.

Вам нужно будет обработать ваше пользовательское действие с помощью некоторых дополнительных функций.

Примечания: Хук woocommerce_admin_order_actions должен использоваться со стандартными действиями пользовательских кнопок woocommerce, поэтому не для пользовательского столбца. Также FontAwesome, похоже, не работает с бэкэндом.

Код входит в функции. php Файл вашей активной дочерней темы (или активной темы). Проверено и работает.

...