デジタルアーカイブ公開システム(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地図利用
詳細はまた書きます。


