ホームページ > 記事 > CMS チュートリアル > WordPressでテーマナビゲーションメニューを作成する方法(2)
「WordPressでテーマナビゲーションメニューを作成する方法(1)」でご紹介しましたが、この記事では引き続きWordPressでテーマナビゲーションメニューを作成する方法を紹介していきます。あなたのお役に立ちますように!
前のチュートリアルでは、WordPress の組み込み関数を使用してナビゲーション メニューを作成する方法について説明しましたが、これらの関数によって生成される HTML コードは固定されているため、ナビゲーション メニューを作成するのは困難です。ナビゲーションの定義: メニューの HTML コード。この記事では、ナビゲーション メニュー以外にも使用できる、ナビゲーション メニューをより自由に作成する方法をいくつか紹介します。もちろん、この記事は問題を解決するためのアイデアを提供するだけであり、レシピのようなチュートリアルではありませんので、読んでコピーすれば、プロジェクトで使用することができます。
使用 get_terms() で記事カテゴリ、リンク カテゴリ、およびカスタマイズを取得します。など、対応するパラメータを get_terms() に渡すと、オブジェクト配列を返すことができます。この配列には、必要なすべてのカテゴリが含まれます。以下は get_terms() の関数プロトタイプです:
<?php get_terms( $taxonomies, $args ) ?>
$taxonomyes:
このパラメータは、取得したい分類カテゴリです。オプションの値には、「category」、「link_category」、「my_taxonomy」が含まれます。それぞれ記事の分類、リンクを表します。分類とカスタマイズされた分類。ここで、my_taxonomy はカスタマイズされた分類名です。
$args:
このパラメータは、カテゴリのフィルタリング パラメータであり、取得するカテゴリの数など、取得するカテゴリの取得を制御するために使用されます。並べ替え方法、親カテゴリ、空のカテゴリを出力するかどうかなど。詳細については、WordPress 公式ドキュメント: 関数リファレンス/用語の取得を参照するか、中国語の簡単な翻訳を参照してください: Common function-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 の各配列項目はオブジェクトであり、オブジェクト属性の意味は次のとおりです: slug: カテゴリの略称、name: カテゴリ名、term_id: カテゴリ ID。上記のコードに示すように、$term->name を通じてオブジェクトの属性値を取得できます。
WordPress データベースを知っている場合は、WordPress の分類情報が wp_terms に保存されていることがわかります。テーブル内で、wp_terms は基本情報 (記事分類、記事タグ、リンク分類などを含む) を保存し、wp_term_taxonomy は詳細な説明 (説明の保存、カテゴリとタグの区別などに使用) を保存するために使用されます。 SQL を使用して、これら 2 つのテーブルから必要なカテゴリのリストを取得できます:
<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でテーマナビゲーションメニューを作成する方法(2)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。