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