ナビゲーションメニュー
ナビゲーション メニューは長い間人々の心に深く根付いており、ブログでのそのアプリケーションの重要性と多様性はますます高まっています。この記事から、WordPress ナビゲーション メニューに関するいくつかのトピックを開始し、その使用方法について説明します。 WordPress のナビゲーション メニューを強化します。トピック間には一定の取り組み関係があり、徐々に難易度が高くなります。
WordPress には通常、ページ ナビゲーション メニューとカテゴリ ナビゲーション メニューの 2 種類のナビゲーション メニューがあります。
WordPress では独立したページを作成できることを覚えていますか? ページ ナビゲーション メニューは、ホームページと各独立したページで構成されるメニューです。
これは効果のデモンストレーションです
メニューはホームページと独立したページのリスト、またはホームページとカテゴリ リストで構成されているため、ホームページのメニュー項目とその他のメニュー項目の 2 つのリンクを扱う必要があります。
さらに、メニュー項目の 3 つの状態、つまり一般状態、現在のメニュー項目の状態 (たとえば、ホームページでは、ホームページのメニュー項目が現在のメニュー項目です)、および選択されたメニューも処理する必要があります。アイテムの状態
つまり、合計 3 つのことに対処する必要があります:
1. ホームページ外のその他メニュー
2. ホームメニュー項目
3. メニュー項目が異なる状態にあるときの視覚効果
<div id="menubar"> <ul class="menus"> <li class="..."><a href="http://.../">Home</a></li> <li class="..."><a href="http://.../">菜单项1</a></li> <li class="..."><a href="http://.../">菜单项2</a></li> <li class="..."><a href="http://.../">菜单项3</a></li> ... </ul> </div>
ページナビゲーションメニュー
1. メニュー項目としての独立したページリスト
wp_list_pages を呼び出して独立したページのリストを取得し、次のパラメーターを使用します:
Depth: リストの深さ (レイヤーの最大数) この記事では第 1 レベルのメニューについて説明するため、最大深さは 1
です。
title_li: タイトル文字列、ここでは必要ありません、0 に設定します
sort_column: ページ作成時に設定した順序に従って、リスト項目を昇順で並べ替える方法
独立したページのメニュー項目を印刷するステートメントは次のとおりです:
<?php wp_list_pages('depth=1&title_li=0&sort_column=menu_order'); ?>
独立したページの一般的なクラスは page_item であるため、現在の独立したページのクラスは current_page_item になります。ページがホームページの場合、ホームページのメニュー項目のクラスは current_page_item でなければなりません。それ以外の場合は、page_item になります。 、それを決定するにはブランチコードが必要です:
。
<?php // 如果是首页, class 是 current_page_item if (is_home()) { $home_menu_class = 'current_page_item'; // 如果不是首页, class 是 page_item } else { $home_menu_class = 'page_item'; } ?>
<li class="<?php echo($home_menu_class); ?>"> <a title="Home" href="<?php echo get_settings('home'); ?>/">Home</a> </li>
これは、一般から特殊へのプロセスです。通常、メニュー項目のスタイルが前に配置され、現在および選択されているメニュー項目のスタイルが後ろに配置されます。後者の条件が満たされる場合、前者のスタイルが配置されます。上書きされるため、外観が変わります
/* 菜单项 */ #menubar ul.menus li { float:left; /* 靠左浮动 */ list-style:none; /* 清空列表风格 */ margin-right:1px; /* 右侧的间隔 */ } /* 菜单项链接 */ #menubar ul.menus li a { padding:5px 10px; /* 内边距 */ display:block; /* 显示为块 */ color:#FFF; /* 文字颜色 */ background:#67ACE5; /* 背景颜色 */ text-decoration:none; /* 没有下横线 */ } /* 当前菜单项链接 */ #menubar ul.menus li.current_page_item a { background:#5495CD; /* 背景颜色 */ } /* 选中菜单项链接 */ #menubar ul.menus li a:hover { background:#4281B7; /* 背景颜色 */ }
カテゴリーナビゲーションメニュー
1. メニュー項目としてのカテゴリリスト
wp_list_categories メソッドを呼び出してカテゴリ リストを取得し、次のパラメータを使用します:
Depth: リストの深さ (レイヤーの最大数) この記事では第 1 レベルのメニューについて説明するため、最大深さは 1
です。
title_li: タイトル文字列、ここでは必要ありません、0 に設定します
orderby: ページ作成時に設定した順序に従ってリスト項目を昇順に並べ替える方法
show_count: このカテゴリの記事数を表示するかどうか、ここでは表示する必要はありません、0に設定します
カテゴリ メニュー項目を印刷するステートメントは次のとおりです:
<?php wp_list_categories('depth=1&title_li=0&orderby=name&show_count=0'); ?>
これは、メニュー項目のクラスが異なることを除いて、ページ ナビゲーション メニューに似ています。
page_item が cat-item
に変更されました
current_page_item が current-cat
に変更されました
メニュー項目のクラスが少し異なるため、これも少し変更する必要があります。
current_page_item が current-cat
に変更されました
二次ナビゲーション メニュー
合計 3 つのことに対処する必要があります:
1. 二次メニュー(サブカテゴリ)を呼び出します
2. 二次メニューのスタイル
3. サブメニューの効果
<div id="menubar"> <ul class="menus"> <li class="..."><a href="http://.../">Home</a></li> <li class="..."> <a href="http://.../">菜单1</a> <ul class="children"> <li class="..."><a href="http://.../">菜单项1</a></li> <li class="..."><a href="http://.../">菜单项2</a></li> <li class="..."><a href="http://.../">菜单项3</a></li> </ul> </li> <li class="..."> <a href="http://.../">菜单2</a> <ul class="children"> <li class="..."><a href="http://.../">菜单项4</a></li> </ul> </li> <li class="..."> <a href="http://.../">菜单3</a> <ul class="children"> <li class="..."><a href="http://.../">菜单项5</a></li> <li class="..."><a href="http://.../">菜单项6</a></li> </ul> </li> ... </ul> </div>
1. 二次メニュー (サブカテゴリ) を呼び出します
ナビゲーション メニューを作成するときに、サブカテゴリを表示しないようにリストの深さを設定する方法をまだ覚えていますか? もちろん、2 番目のレベルのサブカテゴリが必要な場合は、次のようにする必要があります。深さを 2 に設定します。
Depth: リストの深さ (レイヤーの最大数) この記事では 2 番目のメニューについて説明するため、最大深さは 2 です。
カテゴリ メニュー項目を印刷するステートメントは次のとおりです:
<?php wp_list_pages('depth=2&title_li=0&sort_column=menu_order'); ?>
元のスタイルを変更し、サブカテゴリのスタイルを追加するだけです。
/* 二级菜单 */ #menubar ul.children { display:none; /* 初始化页面时不显示出来 */ padding:0; margin:0; } /* 二级菜单的菜单项 */ #menubar ul.children li { float:none; /* 垂直排列 */ margin:0; padding:0; } /* 二级菜单的当前菜单项链接 */ #menubar ul.children li a { width:100px; /* 对 IE6 来说十分很重要 */ }
<li class="<?php echo($home_menu_class); ?>"> <a title="Home" href="<?php echo get_settings('home'); ?>/">Home</a> </li>
3. 二级菜单的效果
全部使用 JavaScript 实现, 为便于理解, 使用面向对象方式编写代码, 借鉴了部分 Prototype 框架的代码. 因为代码比较多, 不适合逐句解说, 所以我已标上了大量注释. 代码不是很复杂, 有 JS 基础的话应该不会存在障碍.
另外为了迎合个别人的口味, 加上透明效果. Enjoy!
/* Author: mg12 Feature: MenuList with second-level menus Update: 2008/08/30 Tutorial URL: http://www.neoease.com/wordpress-menubar-2/ */ /** 类 */ var Class = { create: function() { return function() { this.initialize.apply(this, arguments); } } } /** 菜单列表 */ var MenuList = Class.create(); MenuList.prototype = { /** * 构造方法 * id: 菜单列表 * opacity: 透明度 (0.0 - 1.0, 0.0 为全透明, 1.0 为不透明) */ initialize: function(id, opacity) { // 获取菜单列表 this.obj = document.getElementById(id); if (!this.obj) { return; } // 对菜单列表内的所有菜单进行处理 var menus = this.obj.childNodes; for (var i = 0; i < menus.length; i++) { var menu = menus[i]; if (menu.tagName == 'LI') { // 构建菜单 new Menu(menu, opacity); } } } } /** 菜单 */ var Menu = Class.create(); Menu.prototype = { /** * 构造方法 * target: 目标菜单 * opacity: 透明度 (0.0 - 1.0, 0.0 为全透明, 1.0 为不透明) */ initialize: function(target, opacity) { this.util = new MenuUtil(); // 获取目标菜单 (没多余元素) this.obj = this.util.cleanWhitespace(target); // 定义透明度, 默认为不透明 this.opacity = opacity || 1; // 获取菜单 this.menu = this.obj.childNodes // 重要! 如果菜单不包含菜单项, 则不进行处理 if (this.menu.length < 2) { return; } // 菜单标题和菜单体 this.title = this.menu[0]; this.body = this.menu[1]; // 定义初始样式 this.util.setStyle(this.body, 'visibility', 'hidden'); this.util.setStyle(this.body, 'position', 'absolute'); this.util.setStyle(this.body, 'overflow', 'hidden'); this.util.setStyle(this.body, 'display', 'block'); // 添加监听器 this.addListener(this.obj, 'mouseover', this.util.bind(this, this.activate), false); this.addListener(this.obj, 'mouseout', this.util.bind(this, this.deactivate), false); }, /** * 激活方法 * 当鼠标移动到菜单标题是激活 */ activate: function() { // 获取当前菜单体的位置 var pos = this.util.cumulativeOffset(this.title); var left = pos[0]; var top = pos[1] + this.util.getHeight(this.title); // 定义激活时样式 this.util.setStyle(this.body, 'left', left + 'px'); this.util.setStyle(this.body, 'top', top + 'px'); this.util.setStyle(this.body, 'visibility', 'visible'); this.util.setStyle(this.body, 'opacity', this.opacity); this.util.setStyle(this.body, 'filter', 'alpha(opacity=' + this.opacity * 100 + ')'); }, /** * 解除方法 * 当鼠标移动出菜单标题是激活 */ deactivate: function(){ // 定义解除时样式 this.util.setStyle(this.body, 'visibility', 'hidden'); }, /** * 监听方法 * element: 监听对象 * name: 监听方法 * observer: 执行的方法 * useCapture: 浏览器调用事件的方式 (true 为 Capture 方式, false 为 Bubbling 方式) */ addListener: function(element, name, observer, useCapture) { if(element.addEventListener) { element.addEventListener(name, observer, useCapture); } else if(element.attachEvent) { element.attachEvent('on' + name, observer); } } } /** 一些实用的方法 */ var MenuUtil = Class.create(); MenuUtil.prototype = { initialize: function() { }, $: function(id) { return document.getElementById(id); }, $A: function(iterable) { if(!iterable) { return []; } if(iterable.toArray) { return iterable.toArray(); } else { var results = []; for(var i = 0; i < iterable.length; i++) { results.push(iterable[i]); } return results; } }, bind: function() { var array = this.$A(arguments); var func = array[array.length - 1]; var _method = func, args = array, object = args.shift(); return function() { return _method.apply(object, args.concat(array)); } }, getHeight: function(element) { return element.offsetHeight; }, setStyle: function(element, key, value) { element.style[key] = value; }, getStyle: function(element, key) { return element.style[key]; }, cleanWhitespace: function(list) { var node = list.firstChild; while (node) { var nextNode = node.nextSibling; if(node.nodeType == 3 && !/\S/.test(node.nodeValue)) { list.removeChild(node); } node = nextNode; } return list; }, cumulativeOffset: function(element) { var valueT = 0, valueL = 0; do { valueT += element.offsetTop || 0; valueL += element.offsetLeft || 0; element = element.offsetParent; } while (element); return [valueL, valueT]; } } /** 添加到页面加载事件 */ window.onload = function(e) { new MenuList('menus', 0.9); }

去掉重复并排序的方法:1、使用“Array.from(new Set(arr))”或者“[…new Set(arr)]”语句,去掉数组中的重复元素,返回去重后的新数组;2、利用sort()对去重数组进行排序,语法“去重数组.sort()”。

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于Symbol类型、隐藏属性及全局注册表的相关问题,包括了Symbol类型的描述、Symbol不会隐式转字符串等问题,下面一起来看一下,希望对大家有帮助。

怎么制作文字轮播与图片轮播?大家第一想到的是不是利用js,其实利用纯CSS也能实现文字轮播与图片轮播,下面来看看实现方法,希望对大家有所帮助!

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于对象的构造函数和new操作符,构造函数是所有对象的成员方法中,最早被调用的那个,下面一起来看一下吧,希望对大家有帮助。

方法:1、利用“点击元素对象.unbind("click");”方法,该方法可以移除被选元素的事件处理程序;2、利用“点击元素对象.off("click");”方法,该方法可以移除通过on()方法添加的事件处理程序。

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于面向对象的相关问题,包括了属性描述符、数据描述符、存取描述符等等内容,下面一起来看一下,希望对大家有帮助。

foreach不是es6的方法。foreach是es3中一个遍历数组的方法,可以调用数组的每个元素,并将元素传给回调函数进行处理,语法“array.forEach(function(当前元素,索引,数组){...})”;该方法不处理空数组。

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于BOM操作的相关问题,包括了window对象的常见事件、JavaScript执行机制等等相关内容,下面一起来看一下,希望对大家有帮助。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

SecLists
SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

PhpStorm Mac バージョン
最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

ホットトピック



