サイトは「child1」という名前の子テーマを使用しています。このサイトが "child2"という名前の他の子テーマに切り替わると、それらのウィジェットも移動しますが、テーマの場所は移動しません。テーマのアクティブ化時にメニューをテーマの場所に自動割り当てするにはどうすればよいですか。
$theme = get_current_theme();
$mods = get_option("mods_$theme");
$key = key($mods['nav_menu_locations']);
$mods['nav_menu_locations'][$key] = $menu_id;
update_option("mods_$theme", $mods);
これを修正するためのより良いワードプレスの方法はありますか? (関連するTracトピック: http://core.trac.wordpress.org/ticket/18720 )
さて、私はそれをここに書いているので解決策を書きました:
/*
This action copies old theme's theme location saves to
new theme if new theme doesnt have saves before.
*/
add_action( 'after_switch_theme', 'ajx_theme_locations_rescue' );
function ajx_theme_locations_rescue() {
// bug report / support: http://www.unsalkorkmaz.com/
// We got old theme's slug name
$old_theme = get_option( 'theme_switched' );
// Getting old theme's settings
$old_theme_mods = get_option("theme_mods_{$old_theme}");
// Getting old theme's theme location settings
$old_theme_navs = $old_theme_mods['nav_menu_locations'];
// Getting new theme's theme location settings
$new_theme_navs = get_theme_mod( 'nav_menu_locations' );
// If new theme's theme location is empty (its not empty if theme was activated and set some theme locations before)
if (!$new_theme_navs) {
// Getting registered theme locations on new theme
$new_theme_locations = get_registered_nav_menus();
foreach ($new_theme_locations as $location => $description ) {
// We setting same nav menus for each theme location
$new_theme_navs[$location] = $old_theme_navs[$location];
}
set_theme_mod( 'nav_menu_locations', $new_theme_navs );
}
}
私はあなたがずっと前にこの問題を抱えていたことを知っていますが、このサイトが最初のいくつかで現れたので、 私の解決策 誰かがそれを必要とする場合に私は共有すると思いました。