<span style="color: #009933; font-style: italic;">/**
* WordPress 添加自定义文章类型的存档页面到菜单
* https://www.wpdaxue.com/add-custom-post-types-archive-to-nav-menus.html
*/</span>
<span style="color: #b1b100;">if</span><span style="color: #009900;">(</span> <span style="color: #339933;">!</span><span style="color: #990000;">class_exists</span><span style="color: #009900;">(</span><span style="color: #0000ff;">'CustomPostTypeArchiveInNavMenu'</span><span style="color: #009900;">)</span> <span style="color: #009900;">)</span> <span style="color: #009900;">{</span>
<span style="color: #000000; font-weight: bold;">class</span> CustomPostTypeArchiveInNavMenu <span style="color: #009900;">{</span>
<span style="color: #000000; font-weight: bold;">function</span> CustomPostTypeArchiveInNavMenu<span style="color: #009900;">(</span><span style="color: #009900;">)</span> <span style="color: #009900;">{</span>
add_action<span style="color: #009900;">(</span> <span style="color: #0000ff;">'admin_head-nav-menus.php'</span><span style="color: #339933;">,</span> <span style="color: #990000;">array</span><span style="color: #009900;">(</span> <span style="color: #339933;">&</span><span style="color: #000088;">$this</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'cpt_navmenu_metabox'</span> <span style="color: #009900;">)</span> <span style="color: #009900;">)</span><span style="color: #339933;">;</span>
add_filter<span style="color: #009900;">(</span> <span style="color: #0000ff;">'wp_get_nav_menu_items'</span><span style="color: #339933;">,</span> <span style="color: #990000;">array</span><span style="color: #009900;">(</span> <span style="color: #339933;">&</span><span style="color: #000088;">$this</span><span style="color: #339933;">,</span><span style="color: #0000ff;">'cpt_archive_menu_filter'</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">10</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">3</span> <span style="color: #009900;">)</span><span style="color: #339933;">;</span>
<span style="color: #009900;">}</span>
<span style="color: #000000; font-weight: bold;">function</span> cpt_navmenu_metabox<span style="color: #009900;">(</span><span style="color: #009900;">)</span> <span style="color: #009900;">{</span>
add_meta_box<span style="color: #009900;">(</span> <span style="color: #0000ff;">'add-cpt'</span><span style="color: #339933;">,</span> __<span style="color: #009900;">(</span><span style="color: #0000ff;">'自定义文章类型存档'</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <span style="color: #990000;">array</span><span style="color: #009900;">(</span> <span style="color: #339933;">&</span><span style="color: #000088;">$this</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'cpt_navmenu_metabox_content'</span> <span style="color: #009900;">)</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'nav-menus'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'side'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'default'</span> <span style="color: #009900;">)</span><span style="color: #339933;">;</span>
<span style="color: #009900;">}</span>
<span style="color: #000000; font-weight: bold;">function</span> cpt_navmenu_metabox_content<span style="color: #009900;">(</span><span style="color: #009900;">)</span> <span style="color: #009900;">{</span>
<span style="color: #000088;">$post_types</span> <span style="color: #339933;">=</span> get_post_types<span style="color: #009900;">(</span> <span style="color: #990000;">array</span><span style="color: #009900;">(</span> <span style="color: #0000ff;">'show_in_nav_menus'</span> <span style="color: #339933;">=></span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'has_archive'</span> <span style="color: #339933;">=></span> <span style="color: #009900; font-weight: bold;">true</span> <span style="color: #009900;">)</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'object'</span> <span style="color: #009900;">)</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">if</span><span style="color: #009900;">(</span> <span style="color: #000088;">$post_types</span> <span style="color: #009900;">)</span> <span style="color: #009900;">{</span>
<span style="color: #b1b100;">foreach</span> <span style="color: #009900;">(</span> <span style="color: #000088;">$post_types</span> <span style="color: #b1b100;">as</span> <span style="color: #339933;">&</span><span style="color: #000088;">$post_type</span> <span style="color: #009900;">)</span> <span style="color: #009900;">{</span>
<span style="color: #000088;">$post_type</span><span style="color: #339933;">-></span><span style="color: #004000;">classes</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">(</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$post_type</span><span style="color: #339933;">-></span><span style="color: #004000;">type</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$post_type</span><span style="color: #339933;">-></span><span style="color: #004000;">name</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$post_type</span><span style="color: #339933;">-></span><span style="color: #004000;">object_id</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$post_type</span><span style="color: #339933;">-></span><span style="color: #004000;">name</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$post_type</span><span style="color: #339933;">-></span><span style="color: #004000;">title</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$post_type</span><span style="color: #339933;">-></span><span style="color: #004000;">labels</span><span style="color: #339933;">-></span><span style="color: #004000;">name</span> <span style="color: #339933;">.</span> __<span style="color: #009900;">(</span> <span style="color: #0000ff;">'存档'</span> <span style="color: #009900;">)</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$post_type</span><span style="color: #339933;">-></span><span style="color: #004000;">object</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'cpt-archive'</span><span style="color: #339933;">;</span>
<span style="color: #009900;">}</span>
<span style="color: #000088;">$walker</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Walker_Nav_Menu_Checklist<span style="color: #009900;">(</span> <span style="color: #990000;">array</span><span style="color: #009900;">(</span><span style="color: #009900;">)</span> <span style="color: #009900;">)</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'<div id="cpt-archive" class="posttypediv">'</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'<div id="tabs-panel-cpt-archive" class="tabs-panel tabs-panel-active">'</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'<ul id="ctp-archive-checklist" class="categorychecklist form-no-clear">'</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">echo</span> walk_nav_menu_tree<span style="color: #009900;">(</span> <span style="color: #990000;">array_map</span><span style="color: #009900;">(</span><span style="color: #0000ff;">'wp_setup_nav_menu_item'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$post_types</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span> <span style="color: #009900;">(</span>object<span style="color: #009900;">)</span> <span style="color: #990000;">array</span><span style="color: #009900;">(</span> <span style="color: #0000ff;">'walker'</span> <span style="color: #339933;">=></span> <span style="color: #000088;">$walker</span><span style="color: #009900;">)</span> <span style="color: #009900;">)</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'</ul>'</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'</div><!-- /.tabs-panel -->'</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'</div>'</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'<p class="button-controls">'</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'<span class="add-to-menu">'</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'<input type="submit"'</span> <span style="color: #339933;">.</span> disabled<span style="color: #009900;">(</span> <span style="color: #000088;">$nav_menu_selected_id</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">0</span> <span style="color: #009900;">)</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">' class="button-secondary submit-add-to-menu right" value="'</span><span style="color: #339933;">.</span> __<span style="color: #009900;">(</span><span style="color: #0000ff;">'添加至菜单'</span><span style="color: #009900;">)</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'" name="add-ctp-archive-menu-item" id="submit-cpt-archive" />'</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'<span class="spinner"></span>'</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'</span>'</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'</p>'</span><span style="color: #339933;">;</span>
<span style="color: #009900;">}</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">{</span>
<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'没有自定义文章类型'</span><span style="color: #339933;">;</span>
<span style="color: #009900;">}</span>
<span style="color: #009900;">}</span>
<span style="color: #000000; font-weight: bold;">function</span> cpt_archive_menu_filter<span style="color: #009900;">(</span> <span style="color: #000088;">$items</span><span style="color: #339933;">,</span> <span style="color: #000088;">$menu</span><span style="color: #339933;">,</span> <span style="color: #000088;">$args</span> <span style="color: #009900;">)</span> <span style="color: #009900;">{</span>
<span style="color: #b1b100;">foreach</span><span style="color: #009900;">(</span> <span style="color: #000088;">$items</span> <span style="color: #b1b100;">as</span> <span style="color: #339933;">&</span><span style="color: #000088;">$item</span> <span style="color: #009900;">)</span> <span style="color: #009900;">{</span>
<span style="color: #b1b100;">if</span><span style="color: #009900;">(</span> <span style="color: #000088;">$item</span><span style="color: #339933;">-></span><span style="color: #004000;">object</span> <span style="color: #339933;">!=</span> <span style="color: #0000ff;">'cpt-archive'</span> <span style="color: #009900;">)</span> <span style="color: #b1b100;">continue</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$item</span><span style="color: #339933;">-></span><span style="color: #004000;">url</span> <span style="color: #339933;">=</span> get_post_type_archive_link<span style="color: #009900;">(</span> <span style="color: #000088;">$item</span><span style="color: #339933;">-></span><span style="color: #004000;">type</span> <span style="color: #009900;">)</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">if</span><span style="color: #009900;">(</span> get_query_var<span style="color: #009900;">(</span> <span style="color: #0000ff;">'post_type'</span> <span style="color: #009900;">)</span> <span style="color: #339933;">==</span> <span style="color: #000088;">$item</span><span style="color: #339933;">-></span><span style="color: #004000;">type</span> <span style="color: #009900;">)</span> <span style="color: #009900;">{</span>
<span style="color: #000088;">$item</span><span style="color: #339933;">-></span><span style="color: #004000;">classes</span><span style="color: #009900;">[</span><span style="color: #009900;">]</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'current-menu-item'</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$item</span><span style="color: #339933;">-></span><span style="color: #990000;">current</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #339933;">;</span>
<span style="color: #009900;">}</span>
<span style="color: #009900;">}</span>
<span style="color: #b1b100;">return</span> <span style="color: #000088;">$items</span><span style="color: #339933;">;</span>
<span style="color: #009900;">}</span>
<span style="color: #009900;">}</span>
<span style="color: #000088;">$CustomPostTypeArchiveInNavMenu</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> CustomPostTypeArchiveInNavMenu<span style="color: #009900;">(</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
<span style="color: #009900;">}</span>
请先
!