Versuchen Sie, die Spalte mit dem Namen des Bestellartikels in der Woocommerce Analytics -> Orders-Berichtstabelle hinzuzufügen (und in eine CSV-Datei auszugeben)

Lesezeit: 4 Minuten

Ich versuche, der von WooCommerce Analytics -> Orders bereitgestellten Tabelle eine Spalte hinzuzufügen, in der der Artikelname (nicht der Produktname) dieser Bestellung angezeigt wird.

Probe

Ich habe einen Haken hinzugefügt und versucht, alle Namen des Artikels in der Bestellung zu extrahieren (diesen Haken habe ich zuvor verwendet, und er ist in der Tabelle WooCommerce -> Bestellungen nützlich).

/**
 * Adds 'Item Name' column header to 'Orders' page immediately after 'Customer Type' column.
 *
 * @param string[] $columns
 * @return string[] $new_columns
 */
function sv_wc_reps_add_order_item_name_column_header( $columns ) {

    $new_columns = array();

    foreach ( $columns as $column_name => $column_info ) {

        $new_columns[ $column_name ] = $column_info;

        if ( 'customer_type' === $column_name ) {
            $new_columns['order_item_name'] = __( 'Item Name', 'my-textdomain' );
        }
    }

    return $new_columns;
}
add_filter( 'woocommerce_report_orders_export_columns', 'sv_wc_reps_add_order_item_name_column_header', 20 );


/**
 * Adds 'Item Name' value into each column
 */
add_action( 'woocommerce_report_orders_prepare_export_item' , 'custom_orders_list_column_content', 20, 2 );
function custom_orders_list_column_content( $column, $post_id ) {
    global $the_order, $post;

    if ( 'order_item_name' === $column ) {
        $products_names = []; // Initializing

        // Loop through order items
        foreach ( $the_order->get_items() as $item ) {
            $product = $item->get_product(); // Get the WC_Product object
            $products_names[]  = $item->get_name(); // Store in an array
        }
        // Display
        echo '<ul style="list-style: none;"><li>' . implode('</li><li>', $products_names) . '</li></ul>';
    }
}

Aber nachdem ich meinen Code gespeichert und die Seite aktualisiert hatte, fügte die Bestellberichtstabelle keine neue Spalte hinzu, und als ich auf „Bericht herunterladen“ klickte, zeigte die CSV-Datei die neue Spalte nicht an. Ich denke, meinem Code fehlen einige wichtige Teile.

Versuchen Sie die Spalte mit dem Namen des Bestellartikels in
csba

Ich hatte heute etwas ähnliches zu tun, hier ist das Dokumentation und das Beispiel Ich benutzte, und hier ist, wie ich es tat.

Klonen und starten Sie zunächst woocommerce-admin:

cd wp-content/plugins 
git clone [email protected]:woocommerce/woocommerce-admin.git
cd woocommerce-admin
npm run build

Führen Sie diesen Befehl aus, der Ihre Erweiterung einrichtet:

npm run create-wc-extension

Nachdem Sie damit fertig sind, führen Sie diese Befehle aus:

cd ../<your-plugin-name>
npm install
npm start

Wenn Sie es so weit geschafft haben, gehen Sie zum Admin-Panel und aktivieren Sie Ihr Plugin. Ihre Dateistruktur sollte wie folgt aussehen:

Geben Sie hier die Bildbeschreibung ein

In der Haupt-PHP-Datei des Plugins haben Sie standardmäßig eine Funktion, die die js-Datei enthält, danach fügen Sie Ihren Filter wie folgt hinzu:

/**
 * Show the phone number of the customer in the order analytics table
 * @param $results
 * @param $args
 * @return mixed
 */
add_filter('woocommerce_analytics_orders_select_query', function ($results, $args) {

    if ($results && isset($results->data) && !empty($results->data)) {
        foreach ($results->data as $key => $result) {
            $order = wc_get_order($result['order_id']);
            
            //get the order item data here
            // ...........................
            
            //here is how i did it for the customers phone number
            $results->data[$key]['customer_phone'] = $order->get_billing_phone();
        }
    }

    return $results;
}, 10, 2);

Zeigen Sie Ihre neu hinzugefügte Spalte in der CSV an

/**
 * Add the phone number column to the CSV file
 * @param $export_columns
 * @return mixed
 */
add_filter('woocommerce_report_orders_export_columns', function ($export_columns){
    $export_columns['customer_phone'] = 'Customer phone';
    return $export_columns;
});

/**
 * Add the phone number data to the CSV file
 * @param $export_item
 * @param $item
 * @return mixed
 */
add_filter('woocommerce_report_orders_prepare_export_item', function ($export_item, $item){
    $export_item['customer_phone'] = $item['customer_phone'];
    return $export_item;
}, 10, 2);

Als nächstes müssen Sie die Javascript-Datei ändern. So habe ich es verwendet, um die Telefonnummer anzuzeigen:

// Import SCSS entry file so that webpack picks up changes
import './index.scss';
import {addFilter} from '@wordpress/hooks';
import {__} from '@wordpress/i18n';

const addTableColumn = reportTableData => {
    if ('orders' !== reportTableData.endpoint) {
        return reportTableData;
    }

    const newHeaders = [
        ...reportTableData.headers,
        {
            label: 'Customer phone',
            key: 'customer_phone',
            required: false,
        },
    ];

    const newRows = reportTableData.rows.map((row, index) => {
        const item = reportTableData.items.data[index];
        const newRow = [
            ...row,
            {
                display: item.customer_phone,
                value: item.customer_phone,
            },
        ];
        return newRow;
    });

    reportTableData.headers = newHeaders;
    reportTableData.rows = newRows;

    return reportTableData;
};

addFilter('woocommerce_admin_report_table', 'wg-woocommerce-addon', addTableColumn);

Ich würde vorschlagen, dass Sie Ihre Datenserverseite verarbeiten und das Javascript verwenden, um sie anzuzeigen, aber es liegt an Ihnen. Die neue Spalte wird automatisch in die exportierte CSV-Datei aufgenommen. Du findest noch ein paar weitere Beispiele Hier.

  • Sie müssen Composer i und npm i ausführen und die generierte Datei in Ihre Plugins-Datei und nicht in woocommerce/ einfügen, aber ich habe es versucht und es funktioniert0

    – Ayoub Bousetta

    12. Februar um 14:53 Uhr

Versuchen Sie die Spalte mit dem Namen des Bestellartikels in
Naveen ChandK

Während Sie den Filter zum Erstellen eines neuen Spaltennamens korrekt hinzugefügt haben, haben Sie im zweiten Teil der Vorbereitung des Werts für diese Spalte einen Fehler gemacht.

woocommerce_report_orders_prepare_export_item ist ein Filter-Hook und kein Action-Hook. In Ihrem Code verwenden Sie es als Aktionshaken. Der Filter-Hook hilft Ihnen, die Ausgabe zu ändern. Sie können es wie folgt verwenden:

add_filter('woocommerce_report_orders_prepare_export_item', 'custom_orders_list_column_content', 10, 2)

function custom_orders_list_column_content( $export_item, $item ){ 
    global $post, $the_order;

$items = $the_order->get_items();
foreach ( $items as $item ) {
    $product_name[] = $item->get_name();
}

$export_item['order_item_name'] = $item[$product_name];

    return $export_item
} 

1002860cookie-checkVersuchen Sie, die Spalte mit dem Namen des Bestellartikels in der Woocommerce Analytics -> Orders-Berichtstabelle hinzuzufügen (und in eine CSV-Datei auszugeben)

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy