需要开发定制:定制wordpress插件
记录最近制作外贸站遇到的问题
在制作Wordpress多语言页面的时候,如果不使用翻译插件,又想使用系统自带的选单就需要为每一个页面自定义选单了。
需求是什么?
1.指定语言页面。
2.指定语言选单。
3.选单切换导航的时候更换指定语言页面。
写一个WP插件来实现它
PHP
'Header Menu'
);
foreach ($menu_positions as $position_key => $position_label) {
add_meta_box(
'custom-menu-selector-' . $position_key,
'Custom Menu Selector - ' . $position_label,
'custom_menu_selector_callback',
'page',
'side',
'high',
array('position' => $position_key)
);
}
}
// 输出到当前站点的菜单列表wp页面里面(根据语言提前设置好多个语言的选单)
function custom_menu_selector_callback($post, $metabox)
{
$position = $metabox['args']['position'];
$selected_menu = get_post_meta($post->ID, '_custom_menu_' . $position, true);
$menus = get_terms('nav_menu', array('hide_empty' => false));
echo '';
echo '';
wp_nonce_field('custom_menu_positions_nonce', 'custom_menu_positions_nonce');
}
// 保存页面的时候,把设置的菜单类型保存到帖子里
add_action('save_post', 'save_custom_menu_positions');
function save_custom_menu_positions($post_id)
{
// Check if nonce is set
if (!isset($_POST['custom_menu_positions_nonce']) || !wp_verify_nonce($_POST['custom_menu_positions_nonce'], 'custom_menu_positions_nonce')) {
return;
}
// 存储到meta信息里
$menu_positions = array('header_menu');
foreach ($menu_positions as $position) {
if (array_key_exists($position, $_POST['menu-locations'])) {
update_post_meta($post_id, '_custom_menu_' . $position, sanitize_text_field($_POST['menu-locations'][$position]));
}
}
}
// 页面在切换导航的时候,更新当前设置的选单。
add_action('template_redirect', 'update_primary_menu');
function update_primary_menu()
{
$post_id = get_queried_object_id();
$header_menu = get_post_meta($post_id, '_custom_menu_header_menu', true);
//这里默认选择主选单
$primary_menu_location = 'primary'; // Identifier for
$menu_locations = get_nav_menu_locations();
if (isset($menu_locations[$primary_menu_location])) {
$primary_menu_id = $menu_locations[$primary_menu_location];
$selected_menu_id = $header_menu ? $header_menu : $primary_menu_id;
//设置全局选单
set_theme_mod('nav_menu_locations', array('primary' => $selected_menu_id));
}
}
如何使用?
将这段代码复制到主题的function里面就可以了,也可以制作成wp插件安装使用,当然为了防止修改错误,你可以安装wpCode插件后自定义一个代码段,把这个放进去就可以了。