デジタルアーカイブ公開システム(4)

初期のシステム

最初に考えたのは、カスタム投稿に画像とメタデータを投稿し、カテゴリーで分類することを考えた。メタデータの検索は全文検索で行うこととした。この形である程度の検索が可能であるが詳細検索ができないことからメタデータをカスタムフィールドに記録し、詳細検索が可能にする必要を感じてWordPressの「Advanced Custom Fields」Pluginを利用することとした。

テーマの改造によるシステム

カスタム投稿とカスタムフィールドを利用し、テーマのテンプレートを作成各種機能を実現することを考えた。

カスタム投稿のコンテンツには画像および概要を記入し、カスタムフィールドにメタデータを記入した投稿を一つのデジタルアーカイブとし、これをもとに全文検索、一覧表示、詳細検索、アーカイブ表示の機能をテーマをカスタマイズして実現した。

コンテンツ部分

メタデータ部分

作成したテンプレート

デジタルアーカイブランダム表示

トップページにランダムに6個分サムネイルを表示する。

投稿タイプを指定し、ランダムに6枚表示するために次のようにした。

$args = array(
     'post_type' => 'da', /* 投稿タイプを指定 */
'posts_per_page' => 6,/*1ページ当たり6枚*/
'orderby' => 'rand',/*ランダムに抽出*/
); 
$wp_query = new WP_Query($args);
get_template_part('list-tp');//リスト表示テンプレート(サムネイル・タイトル)

デジタルアーカイブコンテンツ表示(シングル表示)

投稿されたコンテンツ(画像)とメタデータを表示するために、single.phpのthe_content()の後にメタデータ表示用のテンプレートを追加する。

メタデータ表示用(すべての項目表示)

資料No:<?php echo post_custom('sno'); ?><br />
年 代:<?php echo post_custom('nendai'); ?><br />
場 所:<?php echo post_custom('tiiki'); ?><br />
内容分類<?php 
        $field = get_field('naiyou');
        foreach($field as $value) {
           echo '  :' . $value;
        }  ?>
<br />
著作権:<?php echo post_custom('chosakuken'); ?><br />
撮影日:<?php echo post_custom('satueibi'); ?><br />
撮影者:<?php echo post_custom('satueisha'); ?><br />

このテンプレートでは、入力されていない項目もフィールド名が表示される。

検索結果表示

検索結果を表示するために、シングル表示と同様にメタデータ表示用テンプレートを使用する。今回のテーマはリストをカードで表示するものである。

コンテンツと同様にメタデータを表示するテンプレートを挿入する。

<br />
年 代:<?php echo post_custom('nendai'); ?><br />
場 所:<?php echo post_custom('tiiki'); ?><br />
内容分類<?php 
     $field = get_field('naiyou');
     foreach($field as $value) {
       echo ' :' . $value;
     } ?>
<br />

詳細検索画面

詳細検索用のフォームを表示し、検索項目を入力させる。

固定ページに検索フォーム用テンプレートを追加する。

<form method="get" action="<?php bloginfo('url') ;?>">
<input type="hidden" name="post_type" value="da" id="post_type">
 <input type="hidden" name="s" id="s" >

年 代:<select name="nendai">
    <option value="" selected>年代選択</option>
    <option value="平成" >平成</option>
    <option value="昭和">昭和</option>
    <option value="大正">大正</option>
    <option value="明治">明治</option>
    <option value="江戸">江戸</option>
    <option value="江戸以前">江戸以前</option>
</select><br><br>
地域・場所:<input type="text"  name="tiiki"  /><br><br>
内容分類:
<input type="checkbox" name="naiyou[]" value="文化財" >文化財
<input type="checkbox" name="naiyou[]" value="美術品">美術品
<input type="checkbox" name="naiyou[]" value="工芸品">工芸品
<input type="checkbox" name="naiyou[]" value="歴史">歴史
<input type="checkbox" name="naiyou[]" value="自然">自然
<input type="checkbox" name="naiyou[]" value="動植物">動植物
<input type="checkbox" name="naiyou[]" value="建築">建築
<input type="checkbox" name="naiyou[]" value="技術">技術
<input type="checkbox" name="naiyou[]" value="町並">町並
<input type="checkbox" name="naiyou[]" value="観光">観光
<input type="checkbox" name="naiyou[]" value="地域資源">地域資源
<input type="checkbox" name="naiyou[]" value="生活文化(衣食住)">生活文化(衣食住)
<input type="checkbox" name="naiyou[]" value="交通">交通
<input type="checkbox" name="naiyou[]" value="災害">災害
<input type="checkbox" name="naiyou[]" value="産業">産業
<input type="checkbox" name="naiyou[]" value="教育">教育
<br><br>
著作権:<input type="text"  name="chosakuken"  /><br>
撮影者:<input type="text"  name="satueisha"  /><br>
撮影日:<input type="text"  name="satueibi"  /><br>
<input type="submit"  value="検索" /><br>
 </form>

すべての検索項目をテンプレートに記述する。

検索結果表示テンプレート

カスタム投稿の検索結果をリスト表示するテンプレート(search-da.php)を作成した。

search-da.phpの中に検索用テンプレート(dasearch)を読み込む。

<?php //検索結果表示用 ?>
<?php get_header(); ?>
<style type="text/css">
#sidebar{display:none;}
#main{width:1010px;}
.ad-right{float:left;}
</style>
  <?php get_template_part('breadcrumbs-page'); //固定ページパンくずリスト?>
<?php get_template_part('dasearch'); //検索用テンプレート?>
<?php get_template_part('list-p') ?>
<?php get_footer(); ?>

検索フォームのデータをGETし、それをもとに(query_posts)を利用してカスタムフィールドのANDを検索する。

<?php
$satueibi = $_GET['satueibi'];
$satueisha = $_GET['satueisha'];
$nendai = $_GET['nendai'];
$chosakuken = $_GET['chosakuken'];
$tiiki = $_GET['tiiki'];
$naiyou = $_GET['naiyou'];
$post_type = $_GET['post_type'];
if($satueibi){
        $metaquerysp[] = array(
                'key'=>'satueibi',
                'value'=> $satueibi,
    'compare'=>'LIKE',
                );
    }
if($satueisha){
    $metaquerysp[] = array(
            'key'=>'satueisha',
            'value'=> $satueisha,
            'compare'=>'LIKE',
            );
}
if($chosakuken){
    $metaquerysp[] = array(
            'key'=>'chosakuken',
            'value'=> $chosakuken,
            'compare'=>'LIKE',
            );
}
if($tiiki){
    $metaquerysp[] = array(
            'key'=>'tiiki',
            'value'=> $tiiki,
            'compare'=>'LIKE',
            );
}
if($nendai){
        $metaquerysp[] = array(
                'key'=>'nendai',
                'value'=> $nendai,
            'compare'=>'IN',
                );
 }
if($naiyou){
    foreach($naiyou as $val){
        $metaquerysp[] = array(
                'key'=>'naiyou',
                'value'=> $val,
            'compare'=>'LIKE',
                );
    }  
}
$metaquerysp['relation'] = 'AND';
query_posts( array(
'post_type' => $post_type,
    'meta_query' => $metaquerysp,
    )
);
?>
<?php wp_reset_postdata(); ?>

第1次案はテンプレートを利用したため、カスタムフィールドの項目やシングル・リスト表示で入力されて無い項目を非表示にすることなど柔軟性が乏しいものとなっていた。そのためにテンプレートだけでなくプラグインで対応することを考えた。