wordpress custom loop по возрастанию по убыванию сообщений по настраиваемому полю

Я занимаюсь разработкой сайта wordpress, который зависит от цены, поэтому я добавляю пользовательскую заявку под названием «цена»,

<?php while ( have_posts() ) : the_post(); echo $price = get_post_meta($post->ID, 'price', TRUE); endwhile; ?> 

это базовая петля, чтобы показать цену всего сообщения. Требование: может ли кто-нибудь изменить выше, чтобы его показ в соответствии с возрастающим или убывающим порядком, как и каждый ценовой сайт

Solutions Collecting From Web of "wordpress custom loop по возрастанию по убыванию сообщений по настраиваемому полю"

Если бы вы создали свой собственный WP_Query, вы могли бы сделать это следующим образом:

 <?php $args = array( 'orderby' => 'meta_value_num', 'order' => 'ASC', 'meta_key' => 'price' ); $new_query = new WP_Query( $args ); ?> 

См. Примеры в документах:

https://codex.wordpress.org/Class_Reference/WP_Query#Order_.26_Orderby_Parameters

Поскольку вы используете Mainloop, вам нужно действовать по-другому:

 <?php add_action( 'pre_get_posts', 'order_by_price' ); function order_by_price( $query ){ if( ! $query->is_main_query() ) //If its not the main query return return; $query->set( 'order', 'asc' ); $query->set( 'orderby', 'meta_value_num' ); $query->set( 'meta_key', 'price' ); } ?> 

Это будет действовать на каждом Mainloop. Так что будь осторожен. Возможно, вы хотите, чтобы это применялось только для определенных типов сообщений. В этом случае вы должны сначала проверить это:

 <?php add_action( 'pre_get_posts', 'order_by_price' ); function order_by_price( $query ){ if( ! $query->is_main_query() ) //If its not the main query return return; if( 'product' != $query->get( 'post_type' ) ) //Apply only for 'product' post types return; $query->set( 'order', 'asc' ); $query->set( 'orderby', 'meta_value_num' ); $query->set( 'meta_key', 'price' ); } ?> 

Проверьте также Документы для этого ActionHook:

https://codex.wordpress.org/Plugin_API/Action_Reference/pre_get_posts