Если post_type – это или это

Я в основном использую этот бит кода в своих functions.php чтобы упорядочить мои пользовательские типы сообщений по заголовкам в порядке возрастания.

 function set_custom_post_types_admin_order($wp_query) { if (is_admin()) { $post_type = $wp_query->query['post_type']; if ( $post_type == 'games') { $wp_query->set('orderby', 'title'); $wp_query->set('order', 'ASC'); } if ( $post_type == 'consoles') { $wp_query->set('orderby', 'title'); $wp_query->set('order', 'ASC'); } } } add_filter('pre_get_posts', 'set_custom_post_types_admin_order'); 

Есть ли способ объединить эти два оператора if , поэтому я не повторяю код. Что-то вроде этого:

 if ( $post_type == 'games' OR 'consoles') OR { $wp_query->set('orderby', 'title'); $wp_query->set('order', 'ASC'); } 

Благодаря!

Solutions Collecting From Web of "Если post_type – это или это"

Используйте оператор switch и объедините соответствующие случаи.

 function set_custom_post_types_admin_order( $query ) { // If not admin or main query, bail. if( !is_admin() || !$query->is_main_query() ) return; $post_type = $query->query['post_type']; switch( $post_type ) { case 'games': case 'consoles': //case 'other_example_match': $query->set('orderby', 'title'); $query->set('order', 'ASC'); break; default: return; } } add_action( 'pre_get_posts', 'set_custom_post_types_admin_order' ); 

Надеюсь, это поможет.

Во-первых, вы захотите быть очень осторожными при подключении к крюку pre_get_posts. Это срабатывает при каждом запросе, который запускается на вашем сайте. Я бы настоятельно рекомендовал добавить другое условие или два к началу вашей функции, чтобы ограничить область действия этого фильтра.

Во-вторых, я бы предложил проверить if ( in_array( $post_type, array( 'games', 'consoles' ) ) как лучшая альтернатива вашему состоянию.

То, как вы используете оператор OR здесь, на самом деле неверно, и вам нужно расширить условие лучше, например, if ( $post_type == 'games' || $post_type == 'consoles' ) . Если вы решите придерживаться этого способа написания условия, я бы также предложил принять привычку писать «условия yoda», например: if ( 'games' == $post_type || 'consoles' == $post_type ) .

В «состоянии yoda» за значением следует переменная, что значительно облегчает обнаружение символа missing = и ошибочного утверждения. Ваша жизнь будет намного счастливее, поверьте мне 🙂

Двойные трубы || сохранить день!

 if ( $post_type == 'games' || 'consoles') OR { $wp_query->set('orderby', 'title'); $wp_query->set('order', 'ASC'); } 

Это делает именно то, что я намеревался сделать!

Редактировать: or также работает вместо двойной трубы. Ты узнаешь что-то новое каждый день!

 $query->set('post_type', array( 'post', 'movie' ) ); 

Или другие примеры вы можете увидеть здесь: http://devotepress.com/wordpress-coding/when-to-use-pre_get_posts-in-wordpress/