Wie implementiert man einen Filter nach Versandart im WooCommerce-Backend?
Lesezeit: 3 Minuten
Lorenzo
Ich muss einen Filter im Woocommerce-Backend implementieren, mit dem ich die Bestellungen nach der ausgewählten Versandart filtern kann.
Ich kann einen Filter für benutzerdefinierte Felder erstellen und die Abfrage ändern, aber das Problem ist, dass Woocommerce die Versandart in einer benutzerdefinierten Tabelle der DB speichert.
Irgendwelche Hinweise, wie man diesen Filter erreicht?
Lorenzo
Ich habe das Hinzufügen eines Dropdown-Menüs mit diesem Hook gelöst:
In Lorenzos Lösung schlägt der Algorithmus fehl, wenn der Titel der Versandart geändert wird. (in meinem Fall dynamisch durch ein Plugin).
Verwenden instance_id Anstatt von title werde dies vermeiden.
add_action( 'restrict_manage_posts', function () {
if ( is_admin() && ! empty( $_GET['post_type'] ) && $_GET['post_type'] == 'shop_order' ) {
$exp_types = array();
$zones = WC_Shipping_Zones::get_zones();
foreach ( $zones as $z ) {
foreach ( $z['shipping_methods'] as $method ) {
$exp_types[ $method->instance_id ] = $method->title;
}
}
?>
<select name="shipping_method">
<option value=""><?php _e( 'Shipping filter' ); ?></option>
<?php
$current_v = isset( $_GET['shipping_method'] ) ? $_GET['shipping_method'] : '';
foreach ( $exp_types as $key => $label ) {
printf( '<option value="%s"%s>%s</option>', $key, $key == $current_v ? ' selected="selected"' : '', $label );
}
?>
</select>
<?php
}
} );
add_filter( 'posts_where', function ( $where, &$wp_query ) {
global $pagenow, $wpdb;
$method = isset( $_GET['shipping_method'] ) ? $_GET['shipping_method'] : false;
if ( is_admin() && $pagenow == 'edit.php' && $wp_query->query_vars['post_type'] == 'shop_order' && ! empty( $method ) ) {
$where .= $wpdb->prepare( "AND ID
IN (
SELECT order_id
FROM {$wpdb->prefix}woocommerce_order_itemmeta m
LEFT JOIN {$wpdb->prefix}woocommerce_order_items i
ON i.order_item_id = m.order_item_id
WHERE meta_key = 'instance_id' and meta_value="{$method}" )" );
}
return $where;
}, 10, 2 );
Dies ist die einzige Lösung, die ein Dropdown-Menü für mich anzeigt. Die anderen Lösungen funktionieren nicht. Aber der Filter funktioniert mit diesem Code nicht gut
– Benfu
13. Dezember 2021 um 14:22 Uhr
13124600cookie-checkWie implementiert man einen Filter nach Versandart im WooCommerce-Backend?yes