簡體   English   中英

如果自定義字段值存在,如何從默認值全局更改Wordpress默認排序順序

[英]How to globally change Wordpress default sorting order from default if custom field value exists

我正在對來自“電影”的自定義字段的帖子進行排序。 我在“電影”自定義字段中有一個名為“排序”的字段值。 我已將此代碼添加到模板循環中,在其中顯示“電影”以根據“排序”值對帖子進行排序:

<?php $loop = new WP_Query( array( 'post_type' => ‘movies’, 'posts_per_page' => -1, 'order' => 'ASC', 'orderby' => 'meta_value', 'meta_key' => 'sorting'  ) ); ?>

我正在嘗試全局檢查(因為我需要在沒有模板的多個頁面上進行排序),如果此自定義字段值存在,則按照meta_key值“排序”對帖子進行排序,就像它們在模板中一樣。 我是否可以將一個函數添加到functions.php文件中,以檢查它是否存在,以及是否可以像我在模板中那樣對所有帖子進行排序?

這是我到目前為止的內容:

function sorting_by($query) {
  if( get_post_meta($post->ID, 'sorting', true)) {
     $query->set('orderby', 'meta_value');
     $query->set('meta_key', 'sorting');
     $query->set('order', 'ASC');
   }
}
add_action('pre_get_posts', 'sorting_by');

非常感謝

我認為您無法測試meta_value是否存在,因為您正在處理查詢,而不是該查詢將檢索的每個帖子。

如果要使其在沒有模板的頁面上起作用,最好確保對所有帖子都設置此排序值。 如果您打算這樣做,請考慮將其替換為“帖子類型”測試,然后避免將這些參數設置為其他帖子類型:

檢查當前帖子類型是否為“電影”:

if( $query->get('post_type') == 'movies' ) {
    //$query->set('orderby', 'meta_value');
    $query->set('orderby', 'meta_value_num'); // Use this if 'sorting' is numeric.
    $query->set('meta_key', 'sorting');
    $query->set('order', 'ASC');
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM