デジタルアーカイブ公開システム(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地図利用

詳細はまた書きます。