私はいくつかの仮想ページを作成するプラグインに取り組んでおり、ユーザーがメニューを作成するときにそれらを自由に追加できるように、これらのリンクをメニュー管理ページで利用できるようにしたいと考えています。
ユーザーがメニューに追加するページを選択できるように、ページ/カテゴリ メタ ボックスと非常によく似た、メニュー管理にメタ ボックスを追加したいと考えています。
私はいくつかの仮想ページを作成するプラグインに取り組んでおり、ユーザーがメニューを作成するときにそれらを自由に追加できるように、これらのリンクをメニュー管理ページで利用できるようにしたいと考えています。
ユーザーがメニューに追加するページを選択できるように、ページ/カテゴリ メタ ボックスと非常によく似た、メニュー管理にメタ ボックスを追加したいと考えています。
どうやら、唯一可能な研究はコア自体にあるようです。
ここでは/wp-includes/nav-menu.php
、メタ ボックスを挿入する方法を取得できます。
add_action('admin_init', 'so_13875144_nav_menu_meta_box');
function so_13875144_nav_menu_meta_box() {
add_meta_box(
'my-custom-nav-box',
__('Custom Box'),
'so_13875144_display_menu_custom_box',
'nav-menus',
'side',
'default'
);
}
function so_13875144_display_menu_custom_box() {
/* Not sure about this global var */
//global $_nav_menu_placeholder;
//$_nav_menu_placeholder = ( 0 > $_nav_menu_placeholder ) ? intval($_nav_menu_placeholder) - 1 : -1;
?>
<p id="menu-item-custom-box">
<label class="howto" for="custom-menu-item-custom-box">
<span><?php _e('URL'); ?></span>
<input id="custom-menu-item-custom-box" name="menu-item[<?php echo $_nav_menu_placeholder; ?>][menu-item-custom-box]" type="text" class="code menu-item-textbox" value="my text" />
</label>
</p>
<?php
}
しかし、うまくいかなかった難しい部分は、値を保存することです。これは、調査する必要が
あるファイルです。/wp-admin/nav-menus.php
アクション にフックしようとしましたwp_update_nav_menu
が、カスタム メタ ボックスの入力フィールドが に渡されていません$_POST
。
WordPress Answers にヒントがあるかもしれません: https://wordpress.stackexchange.com/search?q=wp_update_nav_menu
http://codex.wordpress.org/Function_Reference/add_meta_box
post_type 'nav-menus' を使用する
私はパーティーに遅れていることを知っていますが、これをやろうとしている他の人のために...
b__ は正しいです。これは、チェックボックスを検索する組み込みの JavaScript 関数があるため、他のフィールドよりもチェックボックスを使用する方がはるかに簡単であることを除いて、ページに表示する方法です。
あなたがする必要があるのは、既存のチェックボックスからhtmlをコピーすることだけです -
<li><label class="menu-item-title"><input type="checkbox" class="menu-item-checkbox" name="menu-item[-1][menu-item-object-id]" value="2"> Sample Page</label><input type="hidden" class="menu-item-db-id" name="menu-item[-1][menu-item-db-id]" value="0"><input type="hidden" class="menu-item-object" name="menu-item[-1][menu-item-object]" value="page"><input type="hidden" class="menu-item-parent-id" name="menu-item[-1][menu-item-parent-id]" value="0"><input type="hidden" class="menu-item-type" name="menu-item[-1][menu-item-type]" value="post_type"><input type="hidden" class="menu-item-title" name="menu-item[-1][menu-item-title]" value="Sample Page"><input type="hidden" class="menu-item-url" name="menu-item[-1][menu-item-url]" value=""><input type="hidden" class="menu-item-target" name="menu-item[-1][menu-item-target]" value=""><input type="hidden" class="menu-item-attr_title" name="menu-item[-1][menu-item-attr_title]" value=""><input type="hidden" class="menu-item-classes" name="menu-item[-1][menu-item-classes]" value=""><input type="hidden" class="menu-item-xfn" name="menu-item[-1][menu-item-xfn]" value=""></li>
ただし、それぞれに一意の ID を付与し、URL、タイトルなどの詳細を入力してください。
次に、最後に送信ボタンを追加して、メニューに追加します -
<input type="submit" class="button-secondary submit-add-to-menu right" value="<?php esc_attr_e('Add to Menu'); ?>" name="YOUR NAME" id="YOUR ID" onclick="(function(){$('#THE DIV YOU HAVE PUT YOUR LIST IN').addSelectedToMenu( api.addMenuItemToBottom );})"/>
これで、アイテムがリストに追加されます。