Ich möchte eine zusätzliche Spalte im Backend von WooCommerce (in der Bestellübersicht) anzeigen. Die Spalte sollte ein benutzerdefiniertes Feld enthalten, das ich definiert habe (Lieferdatum).
Wie macht man das?
Christoph S. Ackermann
Ich möchte eine zusätzliche Spalte im Backend von WooCommerce (in der Bestellübersicht) anzeigen. Die Spalte sollte ein benutzerdefiniertes Feld enthalten, das ich definiert habe (Lieferdatum).
Wie macht man das?
post_ahead
Falls es noch jemand braucht – Anleitung zum Hinzufügen neuer Spalten in der Woocommerce-Bestellliste. Sie müssen die Standardspalten nicht deaktivieren, fügen Sie dies einfach in Ihre functions.php ein und Ihr Code ist für Updates gültig.
add_filter( 'manage_edit-shop_order_columns', 'MY_COLUMNS_FUNCTION' );
function MY_COLUMNS_FUNCTION($columns){
$new_columns = (is_array($columns)) ? $columns : array();
unset( $new_columns['order_actions'] );
//edit this for you column(s)
//all of your columns will be added before the actions column
$new_columns['MY_COLUMN_ID_1'] = 'MY_COLUMN_1_TITLE';
$new_columns['MY_COLUMN_ID_2'] = 'MY_COLUMN_2_TITLE';
//stop editing
$new_columns['order_actions'] = $columns['order_actions'];
return $new_columns;
}
add_action( 'manage_shop_order_posts_custom_column', 'MY_COLUMNS_VALUES_FUNCTION', 2 );
function MY_COLUMNS_VALUES_FUNCTION($column){
global $post;
$data = get_post_meta( $post->ID );
//start editing, I was saving my fields for the orders as custom post meta
//if you did the same, follow this code
if ( $column == 'MY_COLUMN_ID_1' ) {
echo (isset($data['MY_COLUMN_1_POST_META_ID']) ? $data['MY_COLUMN_1_POST_META_ID'] : '');
}
if ( $column == 'MY_COLUMN_ID_2' ) {
echo (isset($data['MY_COLUMN_2_POST_META_ID']) ? $data['MY_COLUMN_2_POST_META_ID'] : '');
}
//stop editing
}
add_filter( "manage_edit-shop_order_sortable_columns", 'MY_COLUMNS_SORT_FUNCTION' );
function MY_COLUMNS_SORT_FUNCTION( $columns ) {
$custom = array(
//start editing
'MY_COLUMN_ID_1' => 'MY_COLUMN_1_POST_META_ID',
'MY_COLUMN_ID_2' => 'MY_COLUMN_2_POST_META_ID'
//stop editing
);
return wp_parse_args( $custom, $columns );
}
Sehr gut erklärte Antwort. Beim ersten Beispiel fehlt ein Semikolon
– Devin Walker
26. September 2013 um 20:44 Uhr
Weißt du, ob das in WooCommerce 2.1.3 noch funktioniert? Ich habe es versucht, aber es scheint nicht zu funktionieren; Es werden keine benutzerdefinierten Spalten hinzugefügt. Es scheint wie der Filter angewendet wird; wenn ich setze die()
in der Funktion werden keine Spalten angelegt, ansonsten bekomme ich keinerlei Änderung.
– Dr
5. März 2014 um 17:58 Uhr
@Dre Der erste Filter benötigt eine etwas höhere Priorität als die Standardeinstellung von 10. Als ich ihn von einem Plugin aus ausgeführt habe, hat es 11 funktioniert: add_filter( 'manage_edit-shop_order_columns', 'MY_COLUMNS_FUNCTION', 11 );
– Orionrush
8. Juni 2014 um 13:17 Uhr
Funktioniert wahrscheinlich nicht, weil WooCommerce seinen Code absichtlich aktualisiert und geändert hat, um zu versuchen, uns alle zu erpressen, indem es 49 $ für genau dieses Ergebnis verlangt. woothemes.com/products/admin-custom-order-fields
– Ivandude
2. Juli 2014 um 2:18 Uhr
+2 sehr gute Antwort. Optionaler Schritt 3 funktioniert gut (läuft mit dem neuesten WooCommerce)
– Ben
8. Dezember 2014 um 5:22 Uhr
Um einen neuen Spaltencoupon in der Woo-Commerce-Bestelltabelle hinzuzufügen und alle Couponcodes entsprechend der Bestellung zu erhalten. Sie müssen Ihre function.php kopieren und einfügen.
add_filter('manage_edit-shop_order_columns', 'custom_shop_order_column', 11);
function custom_shop_order_column($columns) {
//add columns
$columns['my-column1'] = __('Coupons Code', 'theme_slug');
return $columns;
}
// adding the data for each orders by column (example)
add_action('manage_shop_order_posts_custom_column', 'cbsp_credit_details', 10, 2);
function cbsp_credit_details($column) {
global $post, $woocommerce, $the_order;
$order_id = $the_order->id;
switch ($column) {
case 'my-column1' :
// $myVarOne = wc_get_order_item_meta( $order_id, 15, true );
if ($the_order->get_used_coupons()) {
$coupons_count = count($the_order->get_used_coupons());
foreach ($the_order->get_used_coupons() as $coupon) {
echo $coupon;
$i++;
}
echo '</p>';
}
// echo $myVarOne;
break;
}
}
Probieren Sie dies aus, Sie erhalten Ihre Lösung. Schreiben Sie einfach den folgenden Code auf Ihren Funktion.php Datei.
add_filter( 'manage_edit-shop_order_columns','your_function_name',10 );
function your_function_name($columns){
$columns['delivery_date'] = __('Delivery date','textdomain');
return $columns;
}
add_action( 'manage_shop_order_posts_custom_column','your_other_function_name',20 );
function your_other_function_name($column)
{
swith($column)
{
case 'delivery_date': // your custom code here and do what you want.
}
}
Folgendes funktioniert für WooCommerce 2.6.2. Sie sollten sich zwei neue Hooks ansehen:
add_filter('woocommerce_admin_order_item_headers', 'so13683162_headers');
function so13683162_headers($order) {
echo "<th>FIELD1</th>";
}
add_filter('woocommerce_admin_order_item_values', 'so13683162_values');
function so13683162_values($product) {
if (isset($product -> id)) {
$attrs = get_post_meta($product -> id, "_product_attributes", true);
echo "<td>" . $attrs["FIELD1"]["value"] . "</td>";
}
}
Omak
Ich bin jetzt auf Woocommerce gestoßen. Habe ein benutzerdefiniertes Feld Persönliche Registrierungsnummer hinzugefügt und wollte nun, dass es auf der Bestellübersichtsseite angezeigt wird.
Ich habe es geschafft, die Spalte hinzuzufügen, konnte aber immer noch nicht den Wert des benutzerdefinierten Felds für jede Bestellung abrufen.
Folgendes habe ich getan:
// Removed Existing Order Page collumns
remove_filter('manage_edit-shop_order_columns', 'woocommerce_edit_order_columns');
// Added My own filter to Show the PRN - Personal Registration field
add_filter('manage_edit-shop_order_columns', 'omak_edit_order_columns');
// The omak_edit_order_columns definition
/*** Taken from admin/post_types/shop_order.php ***/
function omak_edit_order_columns($columns){
global $woocommerce;
$columns = array();
$columns["cb"] = "<input type=\"checkbox\" />";
$columns["order_status"] = __( 'Status', 'woocommerce' );
$columns["order_title"] = __( 'Order', 'woocommerce' );
$columns["order_prn"] = __( 'PRN', 'woocommerce' ); // This is the line which added the column after the Title Column
$columns["billing_address"] = __( 'Billing', 'woocommerce' );
$columns["shipping_address"] = __( 'Shipping', 'woocommerce' );
$columns["total_cost"] = __( 'Order Total', 'woocommerce' );
$columns["order_comments"] = '<img alt="' . esc_attr__( 'Order Notes', 'woocommerce' ) . '" src="'%20.%20$woocommerce->plugin_url()%20.%20'/assets/images/order-notes_head.png" class="tips" data-tip="' . __( 'Order Notes', 'woocommerce' ) . '" width="12" height="12" />';
$columns["note"] = '<img src="'%20.%20$woocommerce->plugin_url()%20.%20'/assets/images/note_head.png" alt="' . __( 'Customer Notes', 'woocommerce' ) . '" class="tips" data-tip="' . __( 'Customer Notes', 'woocommerce' ) . '" width="12" height="12" />';
$columns["order_date"] = __( 'Date', 'woocommerce' );
$columns["order_actions"] = __( 'Actions', 'woocommerce' );
return $columns;
}
Lass mich wissen, ob es dir hilft…
Ich muss mich damit befassen, wie ich seine Werte für jeden Auftrag erhalte.
Wie kommentiert: Die Funktionsdefinition existiert in shop_order.php im WooCommerce-Plugin. Lassen Sie mich wissen, wenn jemand es aussortiert … oder weiß, wie es geht.
Danke, (Entschuldigung, war mit etwas beschäftigt, konnte also nicht zurücklesen, um nach Fehlern zu suchen)