如何按字母顺序排列帖子(WooCommerce产品),但忽略某些单词,例如‘the’和‘an’

时间:2015-01-15 作者:Monkey Puzzle

我需要按字母顺序排列我的Wordpress帖子(碰巧是Woocommerce产品),但我想忽略某些单词,例如“The”、“A”和“An”。

是否有一个函数或过滤器可以针对orderby=ASC之上的自定义post查询来忽略某些选定的单词?

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

while ( $loop->have_posts() ) : $loop->the_post(); ?>

3 个回复
最合适的回答,由SO网友:Monkey Puzzle 整理而成

好的,通过一些变通方法解决了这个问题。

在Woocommerce中添加新的排序功能,如:https://gist.githubusercontent.com/bekarice/0df2b2d54d6ac8076f84/raw/wc-sort-by-postmeta.php 很好地工作,但是删除了关于元数据和键的部分,因为我们没有按自定义字段排序(尽管这也是一个很好的解决方法)

  • 更改所有产品以删除slug/permalinks中的冒犯词,以便/a-childs-story成为/childs-story,在Woocommerce设置(产品)中选择新的排序选项作为默认选项
  • 这是函数的最终代码。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\' );
    

    SO网友:Mark Kaplun

    有时,解决这类问题的最简单方法是使用元数据字段,在其中存储要排序的相关值。对于“stackexchange”,您存储“stackexhange”,但对于“mark Kaplen”,您只存储“mark Kaplen”。这应该是非常简单的代码。一旦有了排序值,剩下要做的就是按元字段排序。

    这种方法的最大优点是性能,因为您可以通过这种方式将所有繁重的排序工作留给MYSQL,此外,实现分页或附加过滤器要容易得多。

    SO网友:Leo Caseiro

    WordPress使用MySQL运行,但实际上不可能使用MySQL:https://stackoverflow.com/questions/3252577/how-to-sort-in-sql-ignoring-articles-the-a-an-etc

    https://stackoverflow.com/questions/1285849/custom-order-by-to-ignore-the

    每一个好的答案都建议一个新的专栏,这对WP来说并不理想。

    您可以创建一个由PHP执行的函数,并在MySQL之后运行它。因此,它可以解决问题,或者使用JSON加载您的产品/帖子和Java脚本脚本,就像这里的表分类器:http://mottie.github.io/tablesorter/docs/example-parsers-ignore-articles.html

    结束

    相关推荐

    Custom Admin Menu Order

    我的函数中有一个简单的解决方案。php用于重新排序管理菜单。这是:// Admin menu - reorder function custom_menu_order($menu_ord){ if (!$menu_ord) return true; return array( \'index.php\', // Dashboard \'edit.php?post_type=page\', // Pages \'edit.php