以下のスクリプトでは、カスタムメニューにカテゴリを動的に追加しようとしています。カテゴリにハイパーリンクがないという事実を除いて、すべてがうまく機能します。以下のwp_update_nav_menu_item()に何が欠けていますか?
$cat_args=array(
'hierarchical' => 0,
'exclude' => '1',
'exclude_tree' => '1',
'hide_empty' => 1,
);
$theCats = get_categories($cat_args);
$name = 'Site Menu';
$menu_id = wp_create_nav_menu($name);
$menu = get_term_by( 'name', $name, 'nav_menu' );
/* insert the a link to home */
wp_update_nav_menu_item($menu->term_id, 0, array(
'menu-item-title' => 'Home',
'menu-item-url' => get_bloginfo('url'),
'menu-item-status' => 'publish')
);
/* insert each category except uncategorized */
if (count($theCats) > 0){
foreach($theCats as $category){
wp_update_nav_menu_item($menu->term_id, 0, array(
'menu-item-title' => $category->name,
'menu-item-type' => 'taxonomy',
'menu-item-status' => 'publish',
'menu-item-object' => 'category',
'menu-item-parent-id' => 0)
);
}
}
theme_set_nav_menu($menu->term_id,'header-menu');
[表示]> [メニュー]カテゴリパネルでChromeインスペクタを使用した後、ウィザードを使用してカスタムメニューにカテゴリを手動で追加したときに渡される非表示フォームの値を確認できました。
<li>
<label class="menu-item-title">
<input type="checkbox" class="menu-item-checkbox" name="menu-item[-11][menu-item-object-id]" value="181"> Category One</label>
<input type="hidden" class="menu-item-db-id" name="menu-item[-11][menu-item-db-id]" value="0">
<input type="hidden" class="menu-item-object" name="menu-item[-11][menu-item-object]" value="category">
<input type="hidden" class="menu-item-parent-id" name="menu-item[-11][menu-item-parent-id]" value="0">
<input type="hidden" class="menu-item-type" name="menu-item[-11][menu-item-type]" value="taxonomy">
<input type="hidden" class="menu-item-title" name="menu-item[-11][menu-item-title]" value="Category One">
<input type="hidden" class="menu-item-url" name="menu-item[-11][menu-item-url]" value="http://localhost:8888/silo4/./category-one/">
<input type="hidden" class="menu-item-target" name="menu-item[-11][menu-item-target]" value="">
<input type="hidden" class="menu-item-attr_title" name="menu-item[-11][menu-item-attr_title]" value="">
<input type="hidden" class="menu-item-classes" name="menu-item[-11][menu-item-classes]" value="">
<input type="hidden" class="menu-item-xfn" name="menu-item[-11][menu-item-xfn]" value="">
</li>
その結果、スクリプトは次のようになります。
wp_update_nav_menu_item($menu->term_id, 0, array(
'menu-item-title' => $category->name,
'menu-item-object-id' => $category->term_id,
'menu-item-db-id' => 0,
'menu-item-object' => 'category',
'menu-item-parent-id' => 0,
'menu-item-type' => 'taxonomy',
'menu-item-url' => get_category_link($category->term_id),
'menu-item-status' => 'publish',)
);
オブジェクトIDが必要かどうか
'menu-item-object-id' => $category->cat_ID,