按标题中第二个单词的字母顺序排序WooCommerce产品?

时间:2018-02-12 作者:Blix

我的网站实际上有人的名字作为产品名称,我真的需要它按第二个名字(姓氏)的字母顺序排序

我想我已经找到了一些解决方案,可以使用默认的WP帖子标题来实现这一点,但不会使用woocommerce。

是否可以修改此代码以使其适用于Woocommerce产品?

我发现了以下内容HERE

function posts_orderby_lastname ($orderby_statement) 
{
$orderby_statement = "RIGHT(post_title, LOCATE(\' \', REVERSE(post_title)) - 1) ASC";
return $orderby_statement;
}
作者说这很管用(但我没有办法测试),还有以下内容HERE

function posts_orderby_lastname ($orderby_statement)
{
$orderby_statement = "RIGHT(post_title, LOCATE(\' \', REVERSE(post_title)) - 1) ASC";
return $orderby_statement;
}

<?php
add_filter( \'posts_orderby\' , \'posts_orderby_lastname\' );
$args=array(
\'post_type\' => \'artists\',
\'showposts\' => -1,
\'order\' => \'ASC\'
);
$my_query = null;
$my_query = new WP_Query($args);
if( $my_query->have_posts() ) {
while ($my_query->have_posts()) : $my_query->the_post();
?>
<div class="block item">
<a href="<?php the_permalink(); ?>">
<div class="inner">
<?php if ( has_post_thumbnail() ) { the_post_thumbnail(); } ?>
<div class="block-content">
<h4><?php the_title(); ?></h4>
</div>
</div>
</a>
</div>

<?php
endwhile;
}
remove_filter( \'posts_orderby\' , \'posts_orderby_lastname\' );
wp_reset_query(); // Restore global post data stomped by the_post().
?>
当粘贴到子主题函数中时,php打开和关闭标记会导致错误,但我删除了顶部的打开器&;保存时没有错误,但不确定是否正确??

我不是一个程序员,所以不知道从哪里开始。是否可以使用上面的类似代码来实现woocommerce“产品”自定义帖子类型?

提前非常感谢(再次感谢)

1 个回复
SO网友:Blix

我以一种稍微不同的方式实现了这一点。

在单产品编辑页面中,Woocommerce(WC)能够创建自定义字段。(如果在编辑产品页面中看不到“自定义字段”区域,请选择wordpress管理页面右上角的“屏幕选项”,然后选中“自定义字段”)

因此,我在一个产品上创建了一个“姓氏”自定义字段,通过内置的WC导出功能导出了所有产品,因此我可以看到一个新的“姓氏”字段在csv电子表格中的位置。

然后,在电子表格中,我将所有第二个单词复制到新的自定义字段中,然后将其重新导入,从而用新的自定义字段及其相应的值填充每个产品。

完成后,我找到了几个添加到函数中的代码片段。php。这将“姓氏”字段添加到“orderby”排序中。

/**
 * Adds WooCommerce catalog sorting options using postmeta, such as custom fields
 * Tutorial: http://www.skyverge.com/blog/sort-woocommerce-products-custom-fields/
**/
function skyverge_add_postmeta_ordering_args( $sort_args ) {

$orderby_value = isset( $_GET[\'orderby\'] ) ? wc_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 \'surname\':
        $sort_args[\'orderby\']  = \'meta_value\';
        // Sort by meta_value because we\'re using alphabetic sorting
        $sort_args[\'order\']    = \'asc\';
        $sort_args[\'meta_key\'] = \'surname\';
        // use the meta key you\'ve set for your custom field, i.e., something like "location" or "_wholesale_price"
        break;  
}

return $sort_args;
}
add_filter( \'woocommerce_get_catalog_ordering_args\', \'skyverge_add_postmeta_ordering_args\' );
// Add these new sorting arguments to the sortby options on the frontend
function skyverge_add_new_postmeta_orderby( $sortby ) {

// Adjust the text as desired
$sortby[\'surname\'] = __( \'Sort by surname\', \'woocommerce\' );

return $sortby;
}
add_filter( \'woocommerce_default_catalog_orderby_options\', \'skyverge_add_new_postmeta_orderby\' );
add_filter( \'woocommerce_catalog_orderby\', \'skyverge_add_new_postmeta_orderby\' );

/**
 * This code should be added to functions.php of your theme
 **/
add_filter(\'woocommerce_get_catalog_ordering_args\', \'am_woocommerce_catalog_orderby\'); function am_woocommerce_catalog_orderby( $args ) { $args[\'meta_key\'] = \'surname\'; $args[\'orderby\'] = \'meta_value\'; $args[\'order\'] = \'asc\'; return $args; }
如果其他人使用此选项,您可以在WC的“编辑产品”页面中为自定义字段命名。只需确保将上述代码中的所有“姓氏”实例更改为您使用的任何名称即可。

然后我想到,我可以对sku代码做同样的事情:将其作为第二个单词,然后按其排序。

然而,我不能让它工作。我正在使用WOOF product filter插件,该插件也必须进行修改,以使自定义字段排序工作正常。我想这就是问题所在。

我相信我会解决这个问题,上面的内容将适用于常规的WC商店。希望能帮助别人

结束

相关推荐

Sort order in get_posts

我创建了一个custom template 对于客户。这将是一个多站点安装上的多语言站点设置。正如你在每个分类字母下看到的,帖子都是按字母顺序开始的,但“M”和“O”都不正常。如果您使用顶部的字母栏点击这些类别,这些帖子将按字母顺序排列。两个页面使用相同的代码,所以我不知道我做错了什么。我有一种感觉,我在某处有一个查询冲突,但我找不到它。下面是进行排序的代码:<section class=\"atozlist\"> <?php $newargs =