WP: サイドバーウィジェット wp_tag_cloud PHPコード 親子構造で
WordPress、タグクラウド wp_tag_cloud を親子構造にソート。PHP Code Widgetで追加したウィジェットに書く。
PHPコード
wp_tag_cloudにフックして$tags_data配列を、親子構造を保持した配列で並べ替える
<div class="tagcloud custom-region">
<?php
$taxonomy='region';
add_filter('wp_generate_tag_cloud_data', 'custom_wp_generate_tag_cloud_data');
echo wp_tag_cloud( "taxonomy=".$taxonomy."&show_count=1&pad_counts=true" );
remove_filter( 'wp_generate_tag_cloud_data', 'custom_wp_generate_tag_cloud_data' );
function custom_wp_generate_tag_cloud_data($tags_data) {
$taxonomy='region';
// タームの親子構造の配列を取得
$tree_terms = wp_dropdown_categories('taxonomy='.$taxonomy.'&hierarchical=1&echo=0&value_field=slug');
// slug抜き出し配列に入れる
preg_match_all('/value="(.*?)"/', $tree_terms, $matches);
// タームのオブジェクトの配列で取得
// 親子構造にタームを並べ替え
$order = $matches[1];
$array1 = $tags_data;
$sorted_array = [];
foreach ($order as $i => $search_id) {
foreach ($array1 as $idx => $record) {
if ($search_id == $record[slug]) {
$sorted_array[] = $record;
unset($array1[$idx]);
break;
}
}
}
$tags_data = $sorted_array;
return $tags_data;
}
?>
</div>CSS
<style>
/*SideBar PHP Code Widget タグクラウド地域*/
.custom-region a[aria-label^="近畿"],
.custom-region a[aria-label^="関東"],
.custom-region a[aria-label^="九州"],
.custom-region a[aria-label^="中部"],
.custom-region a[aria-label^="北海道"] {
display:block;
background: #eee;
/*color: white;*/
}
</style>