Je dois commander mes publications Wordpress (il s’agit de produits Woocommerce) par ordre alphabétique, mais je veux ignorer certains mots, par exemple. 'Le' et 'A' et 'An'.
Existe-t-il une fonction ou un filtre pouvant être ciblé vers la requête de publication personnalisée en plus de orderby = ASC pour ignorer certains mots choisis?
<?php
// My custom query
$args = array( 'post_type' => 'product', ... );
$loop = new WP_Query( $args );
while ( $loop->have_posts() ) : $loop->the_post(); ?>
Ok, résolu par un petit moyen de contournement.
Voici le code final pour votre functions.php:
/**
* Cool orderby function from Monkey Puzzle. Adapted from:
* Tutorial: http://www.skyverge.com/blog/sort-woocommerce-products-custom-fields/
**/
function monkey_ordering_args( $sort_args ) {
$orderby_value = isset( $_GET['orderby'] ) ? woocommerce_clean( $_GET['orderby'] ) : apply_filters( 'woocommerce_default_catalog_orderby', get_option( 'woocommerce_default_catalog_orderby' ) );
switch( $orderby_value ) {
// Name your sortby key whatever you'd like; must correspond to the $sortby in the next function
case 'slug':
$sort_args['orderby'] = 'name';
// Sort by ASC because we're using alphabetic sorting
$sort_args['order'] = 'asc';
break;
}
return $sort_args;
}
add_filter( 'woocommerce_get_catalog_ordering_args', 'monkey_ordering_args' );
// Add these new sorting arguments to the sortby options on the frontend
function monkey_add_new_orderby( $sortby ) {
// Adjust the text as desired
$sortby['slug'] = __( 'Sort by name', 'woocommerce' );
return $sortby;
}
add_filter( 'woocommerce_default_catalog_orderby_options', 'monkey_add_new_orderby' );
add_filter( 'woocommerce_catalog_orderby', 'monkey_add_new_orderby' );
Parfois, la solution la plus simple à ce type de problème consiste à utiliser un champ de métadonnées dans lequel vous stockez la valeur pertinente à trier. Pour "le stackexchange" vous stockez "stackexhange" mais pour "mark kaplun" vous ne stockez que "mark kaplun". Cela devrait être un code très trivial à écrire. Une fois que vous avez les valeurs de tri en place, tout ce qui reste à faire est de trier par le champ méta.
Le principal avantage de cette approche est la performance, car vous pouvez ainsi laisser tout le tri lourd au MYSQL. De plus, il est beaucoup plus facile de mettre en œuvre une pagination ou un filtre supplémentaire.
WordPress fonctionne avec MySQL et ce n'est pas vraiment possible avec MySQL: https://stackoverflow.com/questions/3252577/how-to-sort-in-sql-ignoring-articles-the-a-a-etet
(https://stackoverflow.com/questions/1285849/custom-order-by-to-ignore-the } _
Chaque bonne réponse suggère une nouvelle colonne qui n’est pas idéale pour le WP.
Vous seriez capable de créer une fonction à exécuter par PHP et de l'exécuter après MySQL. Donc, cela peut résoudre le problème, ou peut-être utiliser JSON pour charger vos produits/publications et un script de script Java, comme ils le sont ici: http://mottie.github.io/tablesorter/docs/example-parsers- ignore-articles.html