I am trying to sort a view by a certain custom field which includes numbers and letters. The order I wish to have is the following:
5a, 5b, 5c, 5d, 6a, 6b, 6c, 6d,.....up till 11a, 11b, and so on.
When I know sort by number oder numerical order it shows:
5d, 5b, 5a, 5c, 5e - which seems to me like only the number counts - not the letter
When I sort by string or native it shows:
10a, 10b,...11a,11b,...5a, 5b, 5c, 5d - which makes somehow sense, but it does not consider the absolute value of the numbers.
So what can I do?
Thanks in advance!
here is the link to the project, section "Klassenlehrkräfte" is the one it is about: hidden link
Hello and thank you for contacting the Toolset support.
I believe that your first order(by number) returned the results ordered by their ID, which is a number.
The second search is alphabetical, which means that "10e" will come before "5e" because the comparison is done on a character per-character basis, (1<5).
I might suggest a solution but I did not test it. Please let me know what you will get and we can continue further.
1. You will need to hook into the view query, using the "wpv_filter_query". Check the documentation and a simple example here https://toolset.com/documentation/programmer-reference/views-filters/#wpv_filter_query
2. Update the query order parameters to use UNSIGNED as the type of value, as described in the documentation of WP_Query https://developer.wordpress.org/reference/classes/wp_query/#order-orderby-parameters
An example code would be:
// order by numbers inside strings.
add_filter( 'wpv_filter_query', 'prefix_order_by_numbers_inside_strings' );
function prefix_order_by_numbers_inside_strings( $query_args, $view_settings,$view_id ) {
if ( $view_id = 123 ) { // ID of the view to be modified
$query_args['orderby'] = 'meta_value'; // Ordering by custom field
$query_args['order'] = 'ASC'; // ASC order
$query_args['meta_key'] = 'custom-field-slug'; // this could be wpcf-name for a Toolset field called name
$query_args['meta_value'] = 'UNSIGNED'; // Casting the value of custom field to take only numbers
}
return $query_args;
}
Please adapt this code based on your view ID(123) and field slug(custom-field-slug). Note that Toolset custom fields slugs are prefixed with 'wpcf- when using WordPress API directly.
I hope this helps. Let me know your findings.
Hi Jamal,
I 'm not sure, if I did the right thing, but using your code with the ID and the right cf-slug crushes the site - not the whole one, but the one with the loop.
btw: I am using impreza theme and when I use the build-in grid function to show my cpts I also can sort by a certain custom field. In this case I select the specific one and the same issue occurs.
Hello,
I can't really tell if this code will crash the website, I did not test it. But if you allow me temporary access to your website(WordPress+FTP) and specify which file did you update. Maybe there was a semicolon error or something else.
In any way, to investigate a crashed website, you will need to activate PHP debugging and check the generated errors.
https://toolset.com/documentation/programmer-reference/debugging-sites-built-with-toolset/
Your next reply will be private to let you share credentials safely. ** Make a database backup before sharing credentials. **
Hello, I confirm the access is working, but just after login in I encounter a security issue from the website certificate and I am unable to continue debugging. Check this screenshot from 3 browsers. hidden link
Please check with your hosting provider and let me know when I can access it again, or share a Duplicator copy of your website and I'll check it locally.
Hi, this is because no SsL certificate is installed. I think your browsers are warning you automatically.
Indeed! Thanks to my colleagues, I fixed it following this article hidden link
The code crashes because the function expects 3 arguments but only the first was given. I had to change the first line of code with:
add_filter( 'wpv_filter_query', 'prefix_order_by_numbers_inside_strings', 30, 3 );
You can check it on Toolset->Settings->Custom Code(tab).
I believe this has sorted the results bu the first number. But, maybe, this solution is not complete, as "5b" and "5e" are before "a". Check this screenshot hidden link
If you want to have 5a, 5b, 5c, etc. I believe that you will have to add a custom numeric field "order", enter a value for each post and use it in the view.
I hope this helps. Let me know your feedback.