Elke taal een eigen sidebar
Als je WPML gebruikt in een WordPress website met sidebars, dan wil je die sidebars ook graag mee veranderen als de bezoeker een andere taal selecteert. Om dit te realiseren zul je voor elke taal een eigen sidebar aan moeten maken.
Nou kun je natuurlijk de code daarvoor vast in de functions.php zetten, maar als jij (of je opdrachtgever etc.) op een later tijdstip besluit om een taal toe te voegen of te verwijderen, dan moet dit ook handmatig gebeuren.
Dynamische sidebars per taal
Het makkelijkst is dus om sidebars dynamisch aan te laten maken op basis van de talen die geactiveerd zijn. Dat doe je met de volgende code:
<?php
/*
Register sidebars
*/
if ( function_exists('register_sidebars') )
{
// WPML is active
if ( function_exists('icl_get_languages') )
{
foreach ( icl_get_languages('skip_missing=0&orderby=name&order=asc') as $lang )
{
register_sidebar( array(
'name' => __(sprintf('%s Sidebar',strtoupper($lang['language_code']))),
'id' => 'sidebar-'.$lang['language_code'],
'before_widget' => '<li id="%1$s">',
'after_widget' => '</li>',
'before_title' => '<h4>',
'after_title' => '</h4>'
) );
}
}
// WPML is not active
else
{
register_sidebar( array(
'name' => __('Sidebar'),
'id' => 'sidebar-default',
'before_widget' => '<li id="%1$s">',
'after_widget' => '</li>',
'before_title' => '<h4>',
'after_title' => '</h4>'
) );
} // end if/else
} // end if
?>Met bovenstaande code zorg je ervoor dat er een standaard sidebar wordt aangemaakt als er geen talen actief zijn.
Meerdere sidebars
Gebruik je meerdere sidebars en wil je die allemaal vertalen? Dan herhaal je de code binnen in de foreach (de register_sidebar functie dus) en maak je de benodigde wijzigingen (naam & ID van de sidebar).
Een voorbeeldje van meerdere sidebars vertalen (een standaard sidebar en eentje voor de blogs):
<?php
/*
Register sidebars
*/
if ( function_exists('register_sidebars') )
{
// WPML is active
if ( function_exists('icl_get_languages') )
{
foreach ( icl_get_languages('skip_missing=0&orderby=name&order=asc') as $lang )
{
register_sidebar( array(
'name' => __(sprintf('%s Sidebar | Default',strtoupper($lang['language_code']))),
'id' => 'sidebar-default-'.$lang['language_code'],
'before_widget' => '<li id="%1$s">',
'after_widget' => '</li>',
'before_title' => '<h4>',
'after_title' => '</h4>'
) );
register_sidebar( array(
'name' => __(sprintf('%s Sidebar | Blog',strtoupper($lang['language_code']))),
'id' => 'sidebar-blog-'.$lang['language_code'],
'before_widget' => '<li id="%1$s">',
'after_widget' => '</li>',
'before_title' => '<h4>',
'after_title' => '</h4>'
) );
}
}
// WPML is not active
else
{
register_sidebar( array(
'name' => __('Sidebar | Default'),
'id' => 'sidebar-default',
'before_widget' => '<li id="%1$s">',
'after_widget' => '</li>',
'before_title' => '<h4>',
'after_title' => '</h4>'
) );
register_sidebar( array(
'name' => __('Sidebar | Blog'),
'id' => 'sidebar-blog',
'before_widget' => '<li id="%1$s">',
'after_widget' => '</li>',
'before_title' => '<h4>',
'after_title' => '</h4>'
) );
} // end if/else
} // end if
?>Sidebar laden
Nou heb je natuurlijk niet zo heel veel aan vertaalde sidebars als je niet ook de juiste sidebar kan laden op de site. Open je sidebar.php en vervang de huidige code om de dynamische sidebar op te halen met de volgende code:
<?php
if ( function_exists('dynamic_sidebar') )
{
// WPML is active
if ( function_exists('icl_get_languages') )
{
// only load sidebar if it is active
if ( is_active_sidebar('sidebar-'.ICL_LANGUAGE_CODE) ) dynamic_sidebar('sidebar-'.ICL_LANGUAGE_CODE);
}
// WPML is not active
else
{
dynamic_sidebar('sidebar-default');
}
}
?>
Recente reacties