Intereting Posts
Могу ли я защитить тип контента по всему сайту одним паролем? У меня есть что беспокоиться при переключении на тему по умолчанию, чтобы протестировать конфликты плагина? Получить продукты с определенным атрибутом и в категории – woocommerce Включение базы данных биологии с тысячами записей Оптимизация загрузки папки, а затем повторная загрузка? Как добавить новое сообщение При нажатии кнопки? Скрыть ссылки для фильтрации групп пользователей WordPress 3.1 не автоподлежит как группировать сообщения из обычных категорий Изменение кнопки проверки WooCommerce – возврат к нормальному состоянию Использование расширений файлов в заголовках изображений Как фильтровать по категориям в REST API, за исключением сообщений и в других категориях? Как создать переписывать конечные точки в author.php? Блог WordPress или веб-сайт WordPress Фильтр извлечения добавляет «</ p>» в неправильном месте

значение php value numeric

Я использовал часть этого кода на этой странице в Stack Overflow: используя wp_query, можно ли заказать таксономию?

Речь идет о функции, которая позволяет сортировать запрос по значению таксономии. Хотя он работает отлично, я хотел бы сделать еще один шаг вперед.

Значение, которое я получаю из термина таксономии, – это число. Однако, если я сортирую по этому номеру, он дает такой порядок: 1 10 11 2 21 22 и так далее.

Я хочу, чтобы он сортировался «нормально», 1 2 3 5 9 11 15 21 22 и т. Д.

Согласно google, я должен добавить 0 к значению, чтобы сделать его числовым значением, но я не знаю, куда его поместить в этот код. Где-то, он должен сказать значение + 0. Любая идея, где я должен сказать?

Речь идет об этом коде:

function orderby_tax_clauses( $clauses, $wp_query ) { global $wpdb; $taxonomies = get_taxonomies(); foreach ($taxonomies as $taxonomy) { if ( isset( $wp_query->query['orderby'] ) && $taxonomy == $wp_query->query['orderby'] ) { $clauses['join'] .=<<<SQL LEFT OUTER JOIN {$wpdb->term_relationships} ON {$wpdb->posts}.ID={$wpdb->term_relationships}.object_id LEFT OUTER JOIN {$wpdb->term_taxonomy} USING (term_taxonomy_id) LEFT OUTER JOIN {$wpdb->terms} USING (term_id) SQL; $clauses['where'] .= " AND (taxonomy = '{$taxonomy}' OR taxonomy IS NULL)"; $clauses['groupby'] = "object_id"; $clauses['orderby'] = "GROUP_CONCAT({$wpdb->terms}.name ORDER BY name ASC) "; $clauses['orderby'] .= ( 'DESC' == strtoupper( $wp_query->get('order') ) ) ? 'ASC' : 'DESC'; } } return $clauses; } add_filter('posts_clauses', 'orderby_tax_clauses', 10, 2 ); 

Solutions Collecting From Web of "значение php value numeric"

Ваш вопрос больше о SQL, чем WordPress.

Если вы хотите отсортировать имена терминов как числа, вы можете в целом попробовать

 SELECT * FROM wp_terms ORDER BY name+0 ASC 

или

 SELECT * FROM wp_terms ORDER BY name*1 ASC 

или используйте CAST:

 SELECT * FROM wp_terms ORDER BY CAST(name AS SIGNED) ASC 

где вы можете использовать UNSIGNED , UNSIGNED или UNSIGNED DECIMAL(10,2) , только в зависимости от ваших номеров.

Обновить

Чтобы проверить заказ, вы можете посетить свой PHPMyAdmin и запустить этот запрос:

 SELECT tool_terms.name AS tname, tool_posts.* FROM tool_posts LEFT OUTER JOIN tool_term_relationships ON tool_posts.ID=tool_term_relationships.object_id LEFT OUTER JOIN tool_term_taxonomy USING (term_taxonomy_id) LEFT OUTER JOIN tool_terms USING (term_id) WHERE 1=1 AND tool_posts.post_type = 'landschapselement' AND (tool_posts.post_status = 'publish' OR tool_posts.post_status = 'draft' OR tool_posts.post_status = 'pending' OR tool_posts.post_status = 'private') AND (taxonomy = 'beheerseenheidnummer' OR taxonomy IS NULL) GROUP BY object_id ORDER BY tool_terms.name+0 ASC, tool_posts.post_title ASC 

посмотреть, работает ли он там, где я

 ORDER BY GROUP_CONCAT(tool_terms.name ORDER BY name ASC) ASC 

с

 ORDER BY tool_terms.name+0 ASC, tool_posts.post_title ASC 

где мы заказываем сообщения по таксономической числовой величине, а затем второй заказ находится в заголовке сообщения. Я также добавил поле tool_terms.name AS tname в tool_terms.name AS tname SELECT . Это работает на моей установке.

Вы также можете попробовать заменить

 $clauses['orderby'] = "GROUP_CONCAT({$wpdb->terms}.name ORDER BY name ASC) "; $clauses['orderby'] .= ( 'DESC' == strtoupper( $wp_query->get('order') ) ) ? 'ASC' : 'DESC'; 

с:

 $clauses['orderby'] = " {$wpdb->terms}.name+0 "; $clauses['orderby'] .= ( 'DESC' == strtoupper( $wp_query->get('order') ) ) ? 'ASC' : 'DESC'; $clauses['orderby'] = ", {$wpdb->posts}.post_title ASC "; 

Попробуйте сделать ваш запрос похожим на этот:

 "SELECT *, CASE WHEN ASCII(RIGHT(`%column_name%`, 1)) > 47 AND ASCII(RIGHT(`%column_name%`, 1)) < 58 THEN LPAD(CONCAT(`%column_name%`, '-'), 5, '0') ELSE LPAD(`%column_name%`, 5, '0') END AS `vsort` FROM `%table_name%` ORDER BY `vsort`;" 

С этой страницы

Примечание: вы захотите заменить% column_name% на имя столбца ACTUAL и% table_name% с фактическим именем таблицы.

Результат будет похожим на natsort() PHP.