If post_type is This or This

时间:2014-01-10 作者:realph

我基本上是在我的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\');
}
谢谢!

4 个回复
最合适的回答,由SO网友:t31os 整理而成

使用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\' );
希望这有帮助。

SO网友:Brian Richards

首先,在连接到pre\\u get\\u posts挂钩时要非常小心。这会激发在整个站点中运行的每个查询。我强烈建议您在函数的开头添加一两个条件,以限制此筛选器的范围。

第二,我建议检查一下if ( in_array( $post_type, array( \'games\', \'consoles\' ) ) 作为一个更好的选择。

这里使用OR语句的方式实际上是不正确的,您需要更好地扩展条件,例如:。if ( $post_type == \'games\' || $post_type == \'consoles\' ). 如果你选择坚持这种写条件的方式,我还建议你养成写“尤达条件”的习惯,比如:if ( \'games\' == $post_type || \'consoles\' == $post_type ).

在“yoda条件”中,值后面跟着变量,这样就更容易发现缺失的= 符号和错误语句。这样你的生活会更幸福,相信我:)

SO网友:realph

双管|| 拯救这一天!

if ( $post_type == \'games\' || $post_type == \'consoles\') {
      $wp_query->set(\'orderby\', \'title\');
      $wp_query->set(\'order\', \'ASC\');
}
这正是我要做的!

Edit:or 也可以代替双管。你每天都在学习新东西!

SO网友:Foxsk8

$query->set(\'post_type\', array( \'post\', \'movie\' ) );
或其他示例,您可以在此处看到:http://devotepress.com/wordpress-coding/when-to-use-pre_get_posts-in-wordpress/

结束

相关推荐