Intereting Posts
Переадресация wp-admin 302 Как изменить цвет фона только на одной боковой панели? автоматический выход из системы при выходе пользователя из системы на одной из открытых вкладок Все страницы вложений дают 404 Запуск сценариев и стилей нескольких CPTS Как я могу пометить элемент меню как посещенный для каждого уникального пользователя? Сообщество и пользовательский контент. Веб-сайт: подумал о Drupal, но сильно опирался на WordPress Как исключить термины самого низкого уровня в таксономии? скрывать статус панели управления торговлей и отчеты от woo commerce от конкретных пользователей, но показывать другим пользователям Упорядочить по дате на первой странице Как изменить высоту отображаемого изображения в детской теме Twenty Eleven Создание уведомления об обновлении темы api Почему эта функция разрушает мою установку WordPress? сбой обновления темы add_action .. будет работать, если функция пуста?

значение 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.