Pages

Tuesday, June 28, 2005

排序列出 page entries

我發現 wordpress 在 page 管理頁面設定的 order 根本是設心酸的 不管怎麼設,輸出時還是沒有排序,所以只好動手改一下了

修改 wp-include/template-functions-post.php 這個檔案 我的 theme 是呼叫 wp_list_pages(),看了一下發現他是依照 sql 裡的儲存順序來建 page_tree,所以完全沒考慮到 menu_order。

  // Query pages.
  $pages = & get_pages($args);
  if ( $pages ) :

+ // letoh: sort by menu_order + function cmp($a, $b) + { + if ($a->menu_order == $b->menu_order) { + return strcmp($a->post_title, $b->post_title); + } + return ($a->menu_order < $b->menu_order)?-1:1; + } + usort( $pages, 'cmp' );

if ( $r['title_li'] ) $output .= '<li class="pagenav">' . $r['title_li'] . '<ul>';

我用的解法很簡單,在建 tree 之前,把整個 page 陣列根據 menu_order 排一下就可以了,這樣再建 tree 時會從 menu_order 小的開始考慮,一個一個加進去,這樣就不需要對陣列做插入和搬移的動作了。如果 order 相等就根據 title 來排序,而且這樣排序後就算有 child 也不會有影響 (應該吧...)


This article was originally posted on this site.

No comments:

Post a Comment