デジタルアーカイブ公開システム(6)
第2次システム(続き)
前回はメタデータの表示関係について説明した。なるべくテーマを変更してもテーマのカスタマイズが少なく済むようにフィルターフックを利用して画像とメタデータを表示するようにした。
フィルターフックの利用
add_filterでthe_content 及びthe_excerptをフックし、Single及び検索結果表示にメタデータを付加することとした。
個別ページを表示するために、カスタム投稿タイプがdaの時「the_content」に左側に画像、右側にメタデータを表示するように変更した。
個別ページ
また、複数の画像を表示することができるようにした。
// singleページで da の時はメタデータを表示する function da_mdtuika($the_content) { if (is_singular('da')) { $return = da_milist(); return $return; } else { return $the_content; } } add_filter('the_content','da_mdtuika'); //コンテンツ表示 function da_milist(){ global $post; $args = array( 'post_type' => 'attachment', 'numberposts' => -1, //取得する画像数(-1の場合は全て) 'post_status' => 'inherit', 'post_parent' => $post->ID, 'order' => 'ASC', ); $attachments = get_posts($args); //画像表示 ?> <div id="layout" class="pure-g"> <div class="pure-u-1 pure-u-md-3-5"> <div align="center"> <img src=<?php echo($attachments[0]->guid); ?> name="ati" ></img> </div> <?php if(count($attachments) > 1){ ?> サムネイル表示 <div class="js-masonry" > masonryでサムネイルを表示する <?php foreach ($attachments as $attachment) { ?> <div class="card-item slide" align="center"> <a href="javascript:document.ati.src ='<?php echo($attachment->guid); ?>';void(0);">クリックされたら[ati]に表示 <?php echo(wp_get_attachment_image($attachment->ID)); ?> </a> </div> <?php } ?> </div> <?php } ?> </div> <div class="pure-u-1 pure-u-md-2-5"> <?php echo da_mdlist(); ?> メタデータを表示 </div> </div> <?php }
検索結果ページ
検索結果ページはカスタム投稿タイプがdaでsearchの時「the_excerpt」をフックし、リスト表示の抜粋をメタデータとして表示させる。
// searchページで da の時はメタデータを表示する function da_ls_mdtuika($the_excerpt) { $post_type = get_post_type(); if (is_search() && $post_type == 'da') { $return = $the_excerpt; $return .= da_se_mdlist(); return $return; } else { return $the_excerpt; } } add_filter('the_excerpt','da_ls_mdtuika'); // メタデータを表示 function da_se_mdlist(){ global $da_search_sel; $se_mdlist=""; foreach ( $da_search_sel as $sel ) { $field = get_field_object ( $sel ); if ( $field ) { if($field['value'] != ""){ if(is_array($field['value'])){ $se_mdlist .= "<div><b>" . da_label($sel) . " :</b>"; foreach ( $field['value'] as $mvalue ) { $se_mdlist .= $mvalue . " "; } $se_mdlist .= "</div>"; }else{ $se_mdlist .= "<div><b>" . da_label($sel) . " :</b>" . $field['value'] . "</div>"; } } } } return $se_mdlist; }
このプラグインで、ほぼテーマの改造をせずに済むようにしたが、検索結果表示のsearchページに「絞り込み検索」のための関数を付加する必要がある。(一部のテーマでは「$the_excerpt」を利用していないリストページがあるので、改造する必要がある)
また、WordPressの標準テーマでは個別ページにサムネイルが表示されるのでその部分の変更が必要である。
/* 絞り込み検索関数 */ function da_search(){ global $da_searchf_sel; $da_keys = $_GET; $post_type = $da_keys['post_type']; foreach( $da_searchf_sel as $sel){ if($da_keys[$sel]){ if(is_array($da_keys[$sel])){ foreach ($da_keys[$sel] as $da_key){ $metaquerysp[] = array( 'key'=>$sel, 'value'=> $da_key, 'compare'=>'LIKE', ); } }else{ $metaquerysp[] = array( 'key'=>$sel, 'value'=> $da_keys[$sel], 'compare'=>'LIKE', ); } } } $metaquerysp['relation'] = 'AND'; query_posts( array( 'post_type' => $post_type, 'meta_query' => $metaquerysp, 's' => $da_keys['s'], 'posts_per_page' => '10', 'paged' => get_query_var('paged'), ) ); }
現在のシステム
現在のシステムは第2次システムをもとに、テンプレート部分を含んだ関数をショートコードにして固定ページに入力することで表示できるようにした。ショートコードについて以下に示す。
ランダム表示:デジタルアーカイブからランダムにサムネイルを表示する。(表示枚数のデフォルトは10枚、変更はp_p_pageで設定) 「darandom_list」
全文検索フォーム:全文検索用、ポストタイプ及びプレースホルダ(検索までに表示する文字)を変更可能。(ポストタイプのデフォルトはカスタム投稿「da」、プレースホルダーは「デジタルアーカイブ検索」、 変更はp_type、 p_plhで設定) 「kensaku_form」
一覧表示:デジタルアーカイブの一覧を表示する。タイトルとサムネールが表示される。「itiran_l」
詳細検索フォーム:詳細検索用、「メタデータ表示設定」で設定した「検索項目」に基づいて表示。「dakensaku_form」
カテゴリー検索:カテゴリー検索用、設定されたカテゴリを表示し、選択されたカテゴリのデジタルアーカイブのタイトルサムネイルの一覧を表示する。「cat_list」
ブログ一覧:ブログの一覧をサムネイル、本文の最初を表示 「toukou_list」
スライド表示:ランダムに選択されたデジタルアーカイブのサムネイルをスライド表示する。(表示枚数のデフォルトは6枚、変更はp_p_pageで設定) 「daslide_list」
地図の表示:メタデータでGoogle Mapを設定したデータを表示する。「国土地理院地図」及び「Google地図」を利用した2種ある。(Google地図は回数制限があるため国土地理院地図を利用するほうが良い)初期に表示する緯度、経度、拡大率を(p_lat,p_lag,p_zoom)で設定する。「damap_listk p_lat=’緯度’ p_lag=’経度’ p_zoom=’拡大率’」 国土地理院地図利用「damap_listg p_lat=’緯度’ p_lag=’経度’ p_zoom=’拡大率’」 Google地図利用
詳細はまた書きます。