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

 2022年4月の博物館法改正で第3条3項博物館の事業に「博物館資料に係る電磁的記録を作成し、公開すること」が追加されました。この趣旨は 「博物館資料をデジタル化して保存(=デジタル・アーカイブ化)し、インターネット等を通じて公開することが意義深いものと考えれる」とのことであることから、博物館資料のデジタル・アーカイブ化が急がれている。
 そこで、開発したシステムに大量の画像をアップロードし、デジタルアーカイブ化する機能を追加した。(このことによりメタデータ等をCSVから設定することが容易になる)また、絞り込み検索 のために「pre_get_posts」、抜粋作成のために「get_the_excerpt」フックしたことにより多くのテーマでCSS変更だけで対応できるようになった。


// 直接ファイルから表示する

function da_dir_hyouji($dadir){

$imgarrays = [];
$files=glob('wp-content/gdir/'.$dadir.'/*');
$pattern = '/jpg|png|gif|jpeg|JPG|PNG|GIF|JPEG/';
foreach ($files as $file_name) {
	if(preg_match( $pattern, $file_name)){
//    	echo $file_name;
		array_push($imgarrays,$file_name);
 	}
}
//var_dump($imgarrays);

if(get_field('bunsho')){	?>
	<div id="bookcontainer">
		<header>
		<div id="toolbarDiv">
		<span id="button-panel">
		<a id="full-page" href="#full-page">全画面表示</a>
		&nbsp;|&nbsp; <a id="reset" href="#reset">リセット</a>
		&nbsp;|&nbsp; <a id="zoom-out" href="#zoom-out">縮小</a>
		&nbsp;|&nbsp; <a id="zoom-in" href="#zoom-in">拡大</a>
		</span>
		</div>
		</header>
		<div id="bookcontents">
			<div id="contentDiv"  style="background-color:transparent; "></div>
			</div>
		<footer>
			<div id="footerDiv" >
			<a id="previous" href="#previous-page">前頁</a>
			&nbsp;|&nbsp; <a id="next" href="#next-page">次頁</a>
			&nbsp;|&nbsp; 画像番号:<div id="pageNum"></div>
			</div>
		</footer>
	</div>
</div>
<script type="text/javascript">
	var viewer;
	var idata = [
		<?php  foreach ($imgarrays as $imgarray) {
//echo get_site_url().'/'.$imgarray;
		?>
	{  type: 'image',
		url: '<?php echo get_site_url().'/'.$imgarray; ?>',
	},
<?php
	}
?>
];
</script>
<?php
}else
{
	?>
	<div class="slider" >
		<div class="slider-for">
		<?php  foreach ($imgarrays as $imgarray) {
		?> 
 	 		<a class="sp-slide" href= <?php echo get_site_url().'/'.$imgarray; ?>>  <img src="<?php echo get_site_url().'/'.$imgarray; ?>"></a>
      		<?php }?>
		</div>
		<div class="slick-counter"><span class="current"></span>枚目 / <span class="total"></span>枚中</div>
		<div class="slider-nav-wrap">
			<div class="slider-nav">
			<?php  foreach ($imgarrays as $imgarray) {
   			?>
			    <div class="sp-thumbnail"> <img src="<?php echo get_site_url().'/'.$imgarray; ?>"</div></div>
	 		<?php }	?>
    			</div>
			<div class="slick-nav-arrows">
				<div class="slick-next"></div>
				<div class="slick-prev"></div>
			</div>
		</div>
	</div>
</div>
       <?php }}


 絞り込み検索を pre_get_posts  でフックすることによって従来はカスタム投稿"da"用のテンプレートが必要であったが特別なテンプレートを作成する必要がなくなった。

/*
絞り込み検索 pre_get_posts 
*/

  function daPreGetPosts( $query ) {
      if ( is_admin() || ! $query->is_main_query() ){
          return;
     }
       if ( $query->is_search() ) {
         global $da_searchf_sel;
	 $da_keys = $_GET;
         $taxn1 = $_GET['taxn1'];
//var_dump($da_keys);
         if($taxn1){
           $taxquerysp[] = array(
            'taxonomy'=>'taxn',
            'terms'=> $taxn1,
            'include_children'=>false,
            'field'=>'slug',
            'operator'=>'AND'
            );
         }

         if($da_keys['post_type'])$post_type = $da_keys['post_type'];
           else $post_type = $p_t;
//echo $post_type;

         foreach( $da_searchf_sel as $sel){
	  if($da_keys[$sel]){
	    if(!is_array($da_keys[$sel])){
              $da_keys[$sel]=multiexplode( [',',' ','、',' '], $da_keys[$sel]);
            } 
//var_dump($da_keys[$sel]);
	  foreach ($da_keys[$sel] as $da_key){
	    $metaquerysp[] = array(
	    'key'=>$sel,
	    'value'=> $da_key,
	    'compare'=>'LIKE',
	    );
	  }
	}
	}
	$metaquerysp['relation'] = 'AND';

	query_posts( array(
		'post_type' => $post_type,
               'tax_query' => $taxquerysp,
		'meta_query' => $metaquerysp,
		's' => $da_keys['s'],
		'posts_per_page' => '10',
		'paged' => get_query_var('paged'),
		)
	);

         $query->set('posts_per_page', 10);
         $query->set('post_type', $post_type);
         $query->set('tax_query', $taxquerysp);
         $query->set('meta_query', $metaquerysp);
         $query->set('post_type', $post_type);

     }
   }
   add_action('pre_get_posts','daPreGetPosts');

/*
end pre_get_posts
*/

 サーチページでメタデータを表示するときに「the_excerpt」に加え「get_the_excerpt」で取得できるようにフイルターフックした。このことによりLightingG3等に対応できた。

/*
 searchページで da の時はget_the_excerptメタデータを取得する
*/
if (!function_exists('da_ls_mdtuika0')) {
function da_ls_mdtuika0($the_excerpt) {
$post_type = get_post_type();
	if (is_search()  && $post_type == 'da') {
		$return = da_se_mdlist();
		return $return;
	} else {
		return $the_excerpt;
	}
}
add_filter('get_the_excerpt','da_ls_mdtuika0');
}


 博物館資料のデジタル・アーカイブ化が急がれているが、作成したデジタルアーカイブ用プラグインが使われることを期待する。