web-dev-qa-db-fra.com

Comment classer les articles (produits woocommerce) par ordre alphabétique mais ignorer certains mots, par exemple "Le" et "Un"

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(); ?>
2
Monkey Puzzle

Ok, résolu par un petit moyen de contournement.

  1. Ajouter une nouvelle fonction de tri dans Woocommerce, quelque chose comme: https://Gist.githubusercontent.com/bekarice/0df2b2d54d6ac8076f84/raw/wc-sort-by-postmeta.php fonctionne bien, mais supprime les informations sur les valeurs méta. et clés puisque nous ne trions pas par champs personnalisés (bien que cela puisse aussi être une bonne solution de contournement).
  2. Modifiez la commandeby en 'nom'. Par exemple, post slug plutôt que post title.
  3. Modifiez tous les produits pour supprimer les mots fautifs des slugs/permaliens afin que/a-childs-story devienne/childs-story
  4. Choisissez la nouvelle option de tri comme option par défaut dans les paramètres de Woocommerce (produits).

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' );
3
Monkey Puzzle

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.

1
Mark Kaplun

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

0
Leo Caseiro