Cómo ordenar publicaciones (productos de woocommerce) alfabéticamente pero ignoran ciertas palabras, por ejemplo, 'The' y 'An'

2

Necesito ordenar mis publicaciones de Wordpress (que son productos de Woocommerce) en orden alfabético, pero quiero ignorar ciertas palabras, por ejemplo. 'El' y 'A' y 'An'.

¿Hay alguna función o filtro que pueda orientarse a la consulta de publicación personalizada encima de orderby = ASC para ignorar ciertas palabras elegidas?

<?php
// My custom query
$args = array( 'post_type' => 'product', ... );
$loop = new WP_Query( $args );

while ( $loop->have_posts() ) : $loop->the_post(); ?>
    
pregunta Monkey Puzzle 15.01.2015 - 04:25

3 respuestas

3

Ok, lo resolví a través de una pequeña solución.

  1. Agregue una nueva función de clasificación en Woocommerce, algo como: enlace funciona bien, pero elimine el bit de los valores meta y las claves ya que no estamos ordenando por campos personalizados (aunque eso también podría ser una buena solución).
  2. Cambie el orden para que sea 'nombre'. Por ejemplo, post slug en lugar de post título.
  3. Cambie todos los productos para eliminar las palabras ofensivas de los slugs / permalinks para que / a-childs-story se convierta en / childs-story
  4. Elija la nueva opción de clasificación como la opción predeterminada en la configuración de Woocommerce (productos).

Aquí está el código final para tus funciones.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' );
    
respondido por el Monkey Puzzle 15.01.2015 - 05:43
1

A veces, la solución más fácil para este tipo de problema es utilizar un campo de metadatos en el que almacena el valor relevante por el que desea ordenar. Para "the stackexchange" almacena "stackexhange" pero para "mark kaplun" solo almacena "mark kaplun". Esto debería ser un código muy trivial para escribir. Una vez que tenga los valores de clasificación en su lugar, todo lo que queda por hacer es ordenar por el campo meta.

La mayor ventaja de este enfoque es el rendimiento, ya que de esta manera puede dejar toda la clasificación pesada en el MYSQL y, además, es mucho más fácil implementar la paginación o el filtro adicional.

    
respondido por el Mark Kaplun 15.01.2015 - 05:56
0

WordPress se ejecuta con MySQL y no es posible hacerlo usando MySQL: enlace

enlace

Cada buena respuesta sugiere una nueva columna que no es ideal para el WP.

Podrías crear una función para ejecutar mediante PHP y ejecutarla después de MySQL. Por lo tanto, puede solucionar el problema, o tal vez usar JSON para cargar sus productos / publicaciones y un script de Java Script, como el clasificador de tablas aquí: enlace

    
respondido por el Leo Caseiro 15.01.2015 - 04:40

Lea otras preguntas en las etiquetas