首頁 >CMS教程 >&#&按 >WordPress製作主題導覽選單的方法(二)

WordPress製作主題導覽選單的方法(二)

青灯夜游
青灯夜游轉載
2023-02-23 19:44:341772瀏覽

前面跟大家介紹了《WordPress製作主題導覽選單的方法(一)》,本文繼續帶大家來介紹一下WordPress製作主題導覽選單的方法,希望對大家有幫助!

WordPress製作主題導覽選單的方法(二)

上一篇教學講如何使用WordPress內建的函數來建立導航選單,但是這些函數產生的HTML程式碼都是固定的,你很難去定義導航選單的HTML程式碼。本文將為你介紹幾種更自由的方法來建立導航選單,而這些方法不僅可以用於導航選單。當然本文只是提供你一個解決問題的思路,並不是像食譜那樣的教程,一看、一複製就能用在你的專案。

一、使用get_terms()來取得分類清單

使用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(&#39;category&#39;, &#39;orderby=name&hide_empty=0&#39; );

	// 获取到的分类数量
	$count = count($terms);
	if($count > 0){
		// 循环输出所有分类信息
		foreach ($terms as $term) {
			echo &#39;<li><a href="&#39;.get_term_link($term, $term->slug).&#39;" title="&#39;.$term->name.&#39;">&#39;.$term->name.&#39;</a></li>&#39;;
		}
 	}
?>		
</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 = &#39;category&#39;");
							
	if($cats) {
		foreach($cats as $cat) {
			echo &#39;<li><a href="&#39;.get_category_link($cat->term_id).&#39;" title="&#39;.$cat->name.&#39;">&#39;.$cat->name.&#39;</a></li>&#39;;
		}
 	}
?>		
</ul>

#三、如何取得目前分類的id

#     有些時候我們需要製作一個子導航,如http://www.nashowgroup.com/?p=58&lang=zh左邊的人力資源導航,這個導航可以是任意項目,如當前分類下的子分類或目前分類下的文章等。那麼首要問題就是,如何取得目前分類的id,這樣才可以進行下一步的動作。

在分類頁取得目前分類的id:

if ( is_category() ) {
	$cat_id = get_query_var(&#39;cat&#39;);
}

在文章頁取得該文章的第一個分類:

$cats = get_the_category();
if($cats)
    $cat_id = $cats[0]->cat_ID;

四、子导航的制作

     上面我们讲解了如何获取当前分类的id,下面我们来讲讲如何制作子导航。首先,我们来制作一个当前分类下子分类的子导航,这里用到wp_list_categories()来列出子分类,当然你可以用我前面介绍的两种方法来获取分类。:

<ul>
<?php
// 这里我们用到上面获取到的$cat_id,获取该分类下的所有子分类
wp_list_categories(&#39;orderby=name&hide_empty=0&child_of=&#39; . $cat_id);
?> 
</ul>

     如果你的网站规模比较小,一个分类下的文章也不多,那么你可以在子导航中列出这个分类下的所有文章:

<ul>
	<?php
		global $wp_query;

		$query = array ( &#39;cat&#39; => $cat_id, &#39;orderby&#39; => title, &#39;order&#39;=> 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 &#39;class="chose"&#39;; ?> href="<?php the_permalink() ?>"><?php the_title(); ?></a></li>
	<?php endwhile; wp_reset_postdata(); endif; ?>
</ul>

     以上代码中用到了WP_Query来获取文章列表,该对象的使用方法,可以参考WordPress的官方文档:Class Reference/WP QueryFunction Reference/query posts。class="chose"用于高亮当前文章的菜单项,css规则你可以自己定义。

五、页面page的获取

     WordPress的页面page可以通过wp_list_pages()来列出,不过这个函数输出的HTML都是固定的,如果你想要自定义这些HTML,可以使用get_pages()来获取页面列表,代码示例如下:

<ul id="menu">
$mypages = get_pages();

if(count($mypages) > 0) {
    foreach($mypages as $page) {
        echo &#39;<li><a href="&#39;.get_page_link($page->ID).&#39;" title="&#39;.$page->post_title.&#39;">&#39;.$page->post_title.&#39;</a></li>&#39;;
    }
}
else {
    echo &#39;<li><a href="#">没有页面</a></li>&#39;;
}
</ul>

-- 完 --

推荐学习:《WordPress教程

以上是WordPress製作主題導覽選單的方法(二)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:ludou.org。如有侵權,請聯絡admin@php.cn刪除