前面給大家介紹了《WordPress制作主題導(dǎo)航菜單的方法(一)》,本文繼續(xù)帶大家來(lái)介紹一下WordPress制作主題導(dǎo)航菜單的方法,希望對(duì)大家有所幫助!
上一篇教程講了如何使用WordPress內(nèi)置的函數(shù)來(lái)創(chuàng)建導(dǎo)航菜單,但是這些函數(shù)生成的HTML代碼都是固定的,你很難去定義導(dǎo)航菜單的HTML代碼。本文將為你介紹幾種更為自由的方法來(lái)創(chuàng)建導(dǎo)航菜單,而這些方法不僅僅可以用于導(dǎo)航菜單。當(dāng)然本文只是給你提供一個(gè)解決問(wèn)題的思路,并不是像菜譜那樣的教程,一看、一復(fù)制就能用在你的項(xiàng)目。
一、使用get_terms()來(lái)獲取分類(lèi)列表
使用get_terms()可以獲取你的文章分類(lèi)、鏈接分類(lèi)和自定義分類(lèi)等,給get_terms()傳遞相應(yīng)的參數(shù)可以給你返回一個(gè)對(duì)象數(shù)組,這個(gè)數(shù)組就是你想要的所有分類(lèi),以下是get_terms()的函數(shù)原型:
<?php get_terms( $taxonomies, $args ) ?>
登錄后復(fù)制
$taxonomies:
該參數(shù)是你想要獲取的分類(lèi)類(lèi)別,可選值包括:"category","link_category","my_taxonomy",他們分別代表文章分類(lèi)、鏈接分類(lèi)以及你自定義的分類(lèi),其中my_taxonomy是你自定義的分類(lèi)名稱(chēng)。
$args:
該參數(shù)是分類(lèi)的篩選參數(shù),用于控制獲取你要獲取的分類(lèi),包括你想要獲取多少個(gè)分類(lèi)、如何排序、父分類(lèi)以及是否輸出空的分類(lèi)等,具體請(qǐng)參考WordPress官方文檔:Function Reference/get terms,或者參考中文的簡(jiǎn)要翻譯:常用函數(shù)-get_terms()
下面是一個(gè)該函數(shù)的使用示例,這里將顯示一個(gè)所有文章分類(lèi)的<ul><li>..</li>..</ul>形式的無(wú)序列表,當(dāng)然我們可以把它看成菜單:
<ul id="menu"> <?php // 獲取分類(lèi) $terms = get_terms('category', 'orderby=name&hide_empty=0' ); // 獲取到的分類(lèi)數(shù)量 $count = count($terms); if($count > 0){ // 循環(huán)輸出所有分類(lèi)信息 foreach ($terms as $term) { echo '<li><a href="'.get_term_link($term, $term->slug).'" title="'.$term->name.'">'.$term->name.'</a></li>'; } } ?> </ul>
登錄后復(fù)制
get_terms()函數(shù)返回一個(gè)對(duì)象數(shù)組$terms,我們首先判斷這個(gè)數(shù)組是否為空,為空說(shuō)明并沒(méi)有獲取到任何分類(lèi),如果不為空那么你就可以輸出分類(lèi)了。$terms的每個(gè)數(shù)組項(xiàng)就是一個(gè)對(duì)象,部分對(duì)象屬性的意義如:slug:分類(lèi)縮略名,name:分類(lèi)名,term_id:分類(lèi)id。如以上代碼所示,你可以通過(guò)$term->name來(lái)獲取對(duì)象的屬性值。
二、使用讀數(shù)據(jù)庫(kù)的方式獲取分類(lèi)列表
如果你了解WordPress的數(shù)據(jù)庫(kù),可以發(fā)現(xiàn)WordPress的分類(lèi)信息都存儲(chǔ)在wp_terms和wp_term_taxonomy這兩個(gè)表中,wp_terms存儲(chǔ)基本信息(包括文章分類(lèi)、文章標(biāo)簽和鏈接分類(lèi)等),wp_term_taxonomy用于存儲(chǔ)進(jìn)一步描述(用于存儲(chǔ)描述、區(qū)分分類(lèi)和標(biāo)簽等)。我們可以使用SQL來(lái)從這兩個(gè)表中獲取我們想要的分類(lèi)列表:
<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>
登錄后復(fù)制
三、如何獲取當(dāng)前分類(lèi)的id
有些時(shí)候我們需要制作一個(gè)子導(dǎo)航,如http://www.nashowgroup.com/?p=58&lang=zh左邊的人力資源導(dǎo)航,這個(gè)導(dǎo)航可以是任意項(xiàng)目,如當(dāng)前分類(lèi)下的子分類(lèi)或者當(dāng)前分類(lèi)下的文章等。那么首要問(wèn)題就是,如何獲取當(dāng)前分類(lèi)的id,這樣才可以進(jìn)行下一步的動(dòng)作。
在分類(lèi)頁(yè)獲取當(dāng)前分類(lèi)的id:
if ( is_category() ) { $cat_id = get_query_var('cat'); }
登錄后復(fù)制
在文章頁(yè)獲取該文章的第一個(gè)分類(lèi):
$cats = get_the_category(); if($cats) $cat_id = $cats[0]->cat_ID;
登錄后復(fù)制
四、子導(dǎo)航的制作
上面我們講解了如何獲取當(dāng)前分類(lèi)的id,下面我們來(lái)講講如何制作子導(dǎo)航。首先,我們來(lái)制作一個(gè)當(dāng)前分類(lèi)下子分類(lèi)的子導(dǎo)航,這里用到wp_list_categories()來(lái)列出子分類(lèi),當(dāng)然你可以用我前面介紹的兩種方法來(lái)獲取分類(lèi)。:
<ul> <?php // 這里我們用到上面獲取到的$cat_id,獲取該分類(lèi)下的所有子分類(lèi) wp_list_categories('orderby=name&hide_empty=0&child_of=' . $cat_id); ?> </ul>
登錄后復(fù)制
如果你的網(wǎng)站規(guī)模比較小,一個(gè)分類(lèi)下的文章也不多,那么你可以在子導(dǎo)航中列出這個(gè)分類(lèi)下的所有文章:
<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>
登錄后復(fù)制
以上代碼中用到了WP_Query來(lái)獲取文章列表,該對(duì)象的使用方法,可以參考WordPress的官方文檔:Class Reference/WP Query和Function Reference/query posts。class="chose"用于高亮當(dāng)前文章的菜單項(xiàng),css規(guī)則你可以自己定義。
五、頁(yè)面page的獲取
WordPress的頁(yè)面page可以通過(guò)wp_list_pages()來(lái)列出,不過(guò)這個(gè)函數(shù)輸出的HTML都是固定的,如果你想要自定義這些HTML,可以使用get_pages()來(lái)獲取頁(yè)面列表,代碼示例如下:
<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="#">沒(méi)有頁(yè)面</a></li>'; } </ul>
登錄后復(fù)制
— 完 —
推薦學(xué)習(xí):《WordPress教程》