Php 商业中标题由字母和数字组成时的自定义分类产品
所以,我做了一些挖掘,但没有找到正确的方法 我在WooCommerce Wordpress上有一些产品,但它们的标题是由字母和数字混合而成的。 我需要这些产品像这样打印,例如: FNC2100-C FNC2450-C FNC23250-C 当然,Wordpress给了我: FNC2100-C FNC23250-C FNC2450-C 有没有办法做到这一点 我想我可以在WP_查询上做些什么,但我是一个真正的PHP新手,我知道有些可能的修复是在PHP上,有些是在MySQL上。。。而事实上,标题是字符串和整数,让我觉得不知道如何写这个 有人有什么建议吗 下面是class-wc-query.php,我认为这是我需要编辑的文件:Php 商业中标题由字母和数字组成时的自定义分类产品,php,mysql,wordpress,sorting,woocommerce,Php,Mysql,Wordpress,Sorting,Woocommerce,所以,我做了一些挖掘,但没有找到正确的方法 我在WooCommerce Wordpress上有一些产品,但它们的标题是由字母和数字混合而成的。 我需要这些产品像这样打印,例如: FNC2100-C FNC2450-C FNC23250-C 当然,Wordpress给了我: FNC2100-C FNC23250-C FNC2450-C 有没有办法做到这一点 我想我可以在WP_查询上做些什么,但我是一个真正的PHP新手,我知道有些可能的修复是在PHP上,有些是在MySQL上。。。而事实上,标题是字符
/**
* Returns an array of arguments for ordering products based on the selected values.
*
* @access public
* @return array
*/
public function get_catalog_ordering_args( $orderby = '', $order = '' ) {
// Get ordering from query string unless defined
if ( ! $orderby ) {
$orderby_value = isset( $_GET['orderby'] ) ? wc_clean( $_GET['orderby'] ) : apply_filters( 'woocommerce_default_catalog_orderby', get_option( 'woocommerce_default_catalog_orderby' ) );
// Get order + orderby args from string
$orderby_value = explode( '-', $orderby_value );
$orderby = esc_attr( $orderby_value[0] );
$order = ! empty( $orderby_value[1] ) ? $orderby_value[1] : $order;
}
$orderby = strtolower( $orderby );
$order = strtoupper( $order );
$args = array();
// default - menu_order
$args['orderby'] = "strlen('title') => 'ASC', 'title' => 'ASC'";
// $args['orderby'] = 'title';
$args['order'] = $order == 'DESC' ? 'DESC' : 'ASC';
$args['meta_key'] = '';
switch ( $orderby ) {
case 'rand' :
$args['orderby'] = 'rand';
break;
case 'date' :
$args['orderby'] = 'date ID';
$args['order'] = $order == 'ASC' ? 'ASC' : 'DESC';
break;
case 'price' :
$args['orderby'] = "meta_value_num ID";
$args['order'] = $order == 'DESC' ? 'DESC' : 'ASC';
$args['meta_key'] = '_price';
break;
case 'popularity' :
$args['meta_key'] = 'total_sales';
// Sorting handled later though a hook
add_filter( 'posts_clauses', array( $this, 'order_by_popularity_post_clauses' ) );
break;
case 'rating' :
// Sorting handled later though a hook
add_filter( 'posts_clauses', array( $this, 'order_by_rating_post_clauses' ) );
break;
case 'title' :
$args['orderby'] = "strlen('title') => 'ASC', 'title' => 'ASC'";
//$args['orderby'] = 'meta_value meta_value_num title';
$args['order'] = $order == 'DESC' ? 'DESC' : 'ASC';
break;
}
return apply_filters( 'woocommerce_get_catalog_ordering_args', $args );
}
在PHP中,只需调用
代码:
输出:
array (
3 => 'FMC30000-C',
4 => 'FNC21000-C',
1 => 'FNC24500-C',
2 => 'FNC232500-C',
0 => 'FND100000-C',
)
PrdID | SUBSTRING(PrdID,1,3) | SUBSTRING(SUBSTRING_INDEX(PrdID,'-',1),4) | SUBSTRING_INDEX(PrdID,'-',-1)
----------------------------------------------------------------------------------------------------------------
FMC30000-C | FMC | 30000 | C
FNC21000-B | FNC | 21000 | B
FNC21000-C | FNC | 21000 | C
FNC24500-C | FNC | 24500 | C
FNC232500-C | FNC | 232500 | C
FND100000-C | FND | 100000 | C
在MYSQL中,只要格式是
3封信
然后是一系列的数字
连字符
一个或多个字符
…您可以通过拨打电话和
表和查询:
输出:
array (
3 => 'FMC30000-C',
4 => 'FNC21000-C',
1 => 'FNC24500-C',
2 => 'FNC232500-C',
0 => 'FND100000-C',
)
PrdID | SUBSTRING(PrdID,1,3) | SUBSTRING(SUBSTRING_INDEX(PrdID,'-',1),4) | SUBSTRING_INDEX(PrdID,'-',-1)
----------------------------------------------------------------------------------------------------------------
FMC30000-C | FMC | 30000 | C
FNC21000-B | FNC | 21000 | B
FNC21000-C | FNC | 21000 | C
FNC24500-C | FNC | 24500 | C
FNC232500-C | FNC | 232500 | C
FND100000-C | FND | 100000 | C
这是一个非WordPress开发者在黑暗中拍摄的照片
$args['orderby']=substr'title',0,3=>'ASC',substrstrstrstrstrstr'title','-',true,3=>'ASC',substr'title',strps'title','-'+1=>'ASC'
在看了以下内容后:
看起来orderby组件只是以空格分隔,而不是以逗号分隔。试试这个:
$args['orderby'] = "substr('title',0,3) substr(strstr('title','-',true),3) substr('title',strpos('title','-')+1)";
$args['order'] = $order==='DESC'?'DESC':'ASC';
好的,谢谢你的回复。但是WordPress将从DBMySQL动态构建它的数组,所以我不确定如何正确地应用它。。。同样,我也不确定应该在哪个文件中应用代码,尽管我很确定它是wc-query@MateusOliveira我添加了一个应该可靠的mysql方法。这对你有用吗?当然,SELECT子句与演示无关/仅用于演示-您只需要ORDER BY子句。我真的很抱歉这么愚蠢,但我是个新手,无法将其应用到我的代码中…嗯,我不是Wordpress开发人员。我可以带你去喝水,但我不能强迫你喝水。祝你好运。Wordpress直接从db构建它的数组,db已经注册了所有的产品。不幸的是,我没有访问数据库的权限。。。所以我将无法在MySQL上执行任何操作。。。我知道我可以请求db值,在数组中组织它们,然后使用natsort进行排序,但我不确定如何获取它。我将在这个问题上粘贴WooCommerce class-wc-query.php代码,我相信这是我必须解决的问题。我非常确定,一个简单的代码告诉wc首先根据找到的标题的长度排序,然后根据标题排序,对我来说就足够了。。。我只是不能把代码写下来:这是我到目前为止取得的成绩,但它不起作用:case'title':$args['orderby']=mb_strlen'title'=>'ASC','title'=>'ASC'$args['order']=$order=='DESC'?'DESC':'ASC';打破