|
<?php |
|
|
|
/* Problem: We had a network wide nav in Blog 1 that would not translate to French. |
|
WPML Translation Management must be installed for this to work. */ |
|
|
|
//Determine which menu to serve (sql or codex) |
|
function serve_wpml_menu($term_taxonomy_id, $post_parent, $callback) { |
|
if($callback) { |
|
if(ICL_LANGUAGE_CODE === 'en') { |
|
$callback(); |
|
} else { |
|
get_wpml_nav($term_taxonomy_id, $post_parent); |
|
} |
|
} else { |
|
get_wpml_nav($term_taxonomy_id, $post_parent); |
|
} |
|
} |
|
|
|
//Gather menu objects to put them into a list |
|
function get_wpml_nav($term_taxonomy_id, $post_parent) { |
|
|
|
$objects = get_wpml_nav_items($term_taxonomy_id, $post_parent); |
|
if($objects) { |
|
$menu = "<ul>"; |
|
foreach($objects as $item) { |
|
$menu .= get_wpml_nav_item($term_taxonomy_id, $item); |
|
} |
|
$menu .= "</ul>"; |
|
} |
|
print_r($menu); |
|
} |
|
|
|
//SQL query builds array for each level of menu |
|
function get_wpml_nav_items($term_taxonomy_id, $post_parent) { |
|
|
|
global $wpdb; |
|
|
|
$objects = $wpdb -> get_results("SELECT |
|
wp_posts.ID, wp_posts.post_parent, wp_posts.post_title, wp_posts.post_name, wp_posts.guid, wp_posts.menu_order |
|
FROM wp_term_relationships |
|
INNER JOIN wp_icl_translations |
|
INNER JOIN wp_postmeta |
|
INNER JOIN wp_posts |
|
WHERE wp_icl_translations.element_id = wp_term_relationships.object_id |
|
AND wp_term_relationships.term_taxonomy_id = $term_taxonomy_id |
|
AND wp_postmeta.post_id = wp_term_relationships.object_id |
|
AND wp_posts.ID = wp_postmeta.meta_value |
|
AND wp_posts.post_parent = $post_parent |
|
AND wp_posts.post_status = 'publish' |
|
AND wp_postmeta.meta_key = '_menu_item_object_id' |
|
ORDER BY wp_posts.menu_order ASC"); |
|
|
|
return $objects; |
|
|
|
} |
|
|
|
//SQL query builds array for postmeta, used to get classes |
|
function get_wpml_nav_meta($post_id) { |
|
|
|
global $wpdb, |
|
$meta_val; |
|
|
|
$meta = $wpdb -> get_results("SELECT |
|
wp_postmeta.meta_key, wp_postmeta.meta_value |
|
FROM wp_postmeta |
|
WHERE wp_postmeta.post_id = $post_id"); |
|
|
|
foreach ($meta as $key) { |
|
if($key->meta_key === "_menu_item_classes") { |
|
$meta_val = unserialize($key->meta_value); |
|
} |
|
} |
|
|
|
return $meta_val[0]; |
|
|
|
} |
|
|
|
//For each nav item, build html markup |
|
function get_wpml_nav_item ($term_taxonomy_id, $item) { |
|
|
|
$classes = get_wpml_nav_meta($item->ID); |
|
|
|
$menu_item = "<li class='".$classes." menu-item menu-item-type-post_type menu-item-object-page menu-item-has-children'>"; |
|
$menu_item .= "<a href='/fr/".$item->post_name."'>"; |
|
$menu_item .= $item->post_title; |
|
$menu_item .= "</a>"; |
|
|
|
if($item->post_parent == 0) { |
|
|
|
$children = get_wpml_nav_items($term_taxonomy_id, $item->ID); |
|
if($children) { |
|
$menu_item .= "<ul class='sub-menu'>"; |
|
foreach($children as $child) { |
|
$menu_item .= get_wpml_nav_item($term_taxonomy_id, $child); |
|
} |
|
$menu_item .= "</ul>"; |
|
} |
|
|
|
} |
|
|
|
$menu_item .= "</li>"; |
|
|
|
return $menu_item; |
|
} |
|
|
|
/* End Functions to work around WPML menus not translating */ |
|
|
|
?> |