前面跟大家介紹了《WordPress製作主題導覽選單的方法(一)》,本文繼續帶大家來介紹一下WordPress製作主題導覽選單的方法,希望對大家有幫助!
上一篇教學講如何使用WordPress內建的函數來建立導航選單,但是這些函數產生的HTML程式碼都是固定的,你很難去定義導航選單的HTML程式碼。本文將為你介紹幾種更自由的方法來建立導航選單,而這些方法不僅可以用於導航選單。當然本文只是提供你一個解決問題的思路,並不是像食譜那樣的教程,一看、一複製就能用在你的專案。
使用get_terms()可以取得你的文章分類、連結分類和自訂分類等,給get_terms()傳遞對應的參數可以給你回傳一個物件數組,這個數組就是你想要的所有分類,以下是get_terms()的函數原型:
<?php get_terms( $taxonomies, $args ) ?>
$taxonomies:
該參數是您想要取得的分類類別,可選值包括:"category","link_category","my_taxonomy",他們分別代表文章分類、連結分類、以及你自訂的分類,其中my_taxonomy是你自訂的分類名稱。
$args:
此參數是分類的篩選參數,用來控制你要取得的分類,包括你想要取得多少個分類、如何排序、父分類以及是否輸出空的分類等,請具體參考WordPress官方文件:Function Reference/get terms,或參考中文的簡要翻譯:常用函數-get_terms()
下方是一個該函數的使用範例,這裡將顯示一個所有文章分類的ff6d136ddc5fdfeffaf53ff6ee95f18525edfb22a4f469ecb59f1190150159c6..bed06894275b65c1ab86501b08a632eb..929d1f5ca49e04fdcb27f9465b944689形式的無序列表,當然我們可以把它看成選單:
<ul id="menu"> <?php // 获取分类 $terms = get_terms('category', 'orderby=name&hide_empty=0' ); // 获取到的分类数量 $count = count($terms); if($count > 0){ // 循环输出所有分类信息 foreach ($terms as $term) { echo '<li><a href="'.get_term_link($term, $term->slug).'" title="'.$term->name.'">'.$term->name.'</a></li>'; } } ?> </ul>
get_terms()函數傳回一個物件陣列$terms,我們先判斷這個陣列是否為空,為空說明並沒有取得任何分類,如果不為空那麼你就可以輸出分類了。 $terms的每個陣列項目就是一個對象,部分對象屬性的意義如:slug:分類縮略名,name:分類名,term_id:分類id。如以上程式碼所示,你可以透過$term->name來取得物件的屬性值。
如果你了解WordPress的資料庫,可以發現WordPress的分類資訊都儲存在wp_terms和wp_term_taxonomy這兩個表中,wp_terms儲存基本資訊(包括文章分類、文章標籤和連結分類等),wp_term_taxonomy用於儲存進一步描述(用於儲存描述、區分分類和標籤等)。我們可以使用SQL來從這兩個表中取得我們想要的分類清單:
<ul id="menu"> <?php $cats = $wpdb->get_results("SELECT {$wpdb->prefix}terms.term_id, name FROM {$wpdb->prefix}term_taxonomy, {$wpdb->prefix}terms WHERE {$wpdb->prefix}term_taxonomy.term_id = {$wpdb->prefix}terms.term_id AND taxonomy = 'category'"); if($cats) { foreach($cats as $cat) { echo '<li><a href="'.get_category_link($cat->term_id).'" title="'.$cat->name.'">'.$cat->name.'</a></li>'; } } ?> </ul>
# 有些時候我們需要製作一個子導航,如http://www.nashowgroup.com/?p=58&lang=zh左邊的人力資源導航,這個導航可以是任意項目,如當前分類下的子分類或目前分類下的文章等。那麼首要問題就是,如何取得目前分類的id,這樣才可以進行下一步的動作。
在分類頁取得目前分類的id:
if ( is_category() ) { $cat_id = get_query_var('cat'); }
在文章頁取得該文章的第一個分類:
$cats = get_the_category(); if($cats) $cat_id = $cats[0]->cat_ID;
上面我们讲解了如何获取当前分类的id,下面我们来讲讲如何制作子导航。首先,我们来制作一个当前分类下子分类的子导航,这里用到wp_list_categories()来列出子分类,当然你可以用我前面介绍的两种方法来获取分类。:
<ul> <?php // 这里我们用到上面获取到的$cat_id,获取该分类下的所有子分类 wp_list_categories('orderby=name&hide_empty=0&child_of=' . $cat_id); ?> </ul>
如果你的网站规模比较小,一个分类下的文章也不多,那么你可以在子导航中列出这个分类下的所有文章:
<ul> <?php global $wp_query; $query = array ( 'cat' => $cat_id, 'orderby' => title, 'order'=> ASC ); $queryObject = new WP_Query($query); if ($queryObject->have_posts()) : while ($queryObject->have_posts()) : $queryObject->the_post(); ?> <li><a <?php if($post->ID == $wp_query->post->ID) echo 'class="chose"'; ?> href="<?php the_permalink() ?>"><?php the_title(); ?></a></li> <?php endwhile; wp_reset_postdata(); endif; ?> </ul>
以上代码中用到了WP_Query来获取文章列表,该对象的使用方法,可以参考WordPress的官方文档:Class Reference/WP Query和Function Reference/query posts。class="chose"用于高亮当前文章的菜单项,css规则你可以自己定义。
WordPress的页面page可以通过wp_list_pages()来列出,不过这个函数输出的HTML都是固定的,如果你想要自定义这些HTML,可以使用get_pages()来获取页面列表,代码示例如下:
<ul id="menu"> $mypages = get_pages(); if(count($mypages) > 0) { foreach($mypages as $page) { echo '<li><a href="'.get_page_link($page->ID).'" title="'.$page->post_title.'">'.$page->post_title.'</a></li>'; } } else { echo '<li><a href="#">没有页面</a></li>'; } </ul>
-- 完 --
推荐学习:《WordPress教程》
以上是WordPress製作主題導覽選單的方法(二)的詳細內容。更多資訊請關注PHP中文網其他相關文章!