Intereting Posts
Поддомен WordPress MU vhost Почему file_get_contents возвращает источник страницы? Добавление раздела в меню администратора для глобальных настроек запустить силекс или slim с wordpress Как показать 3 последних / просмотренных сообщения в специальных фрагментах на домашней странице с помощью WordPress? Как создать ссылку для страницы Shortcode для отображения всех сообщений из категории на странице Как применяются правила перезаписи в WordPress? Отключить перенаправление на страницу продукта на странице результатов поиска в WooCommerce Полностью скрыть информацию о пользователе Отключить сжатие gpress wordpress? Как вы справляетесь с задачей добавления иерархии в меню навигации? Несколько записей в заголовке args Ограничить редактирование, но разрешить предварительный просмотр пользовательского состояния сообщения Примечание. Константа XYZ, уже определенная в wp-config.php, на линии, которая не существует

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