ジョブマネージャーの求人情報の画像コピーをDuplicatePostで有効にする

  • このエントリーをはてなブックマークに追加
[`evernote` not found]

WordPressでJobManager(ジョブマネージャー)を使用した求人サイト制作時にDuplicatePostを利用して求人情報のコピーを楽にできるようにした際、求人情報に付与される画像データ(メタ情報は画像IDが入っている)コピーがされなかったので対処しました。

duplicate-post/duplicate-post-admin.php の編集

メディアコピー&メディア登録する関数を作成します。

// -----------------------------------------------------------------
// zamuu Add  Start
// -----------------------------------------------------------------
function duplicate_post_copy_meta_image($meta_val /* $url_path */, $meta_key, $post_id) {
	// meta_key 判定
	if($meta_key != [画像格納metaKey]){
		return false;
	}
	// -------------------------
	// ジョブマネージャー起動の確認
	// -------------------------
	if(!is_plugin_active(job-manager/job-manager.php)){
		return false;
	}
	// ------------------
	// ファイルパスかの判定
	// ------------------
	$img_src = wp_get_attachment_image_src($meta_val, 'full');
	$url_path = $img_src[0];
	preg_match('/\/[0-9]{4}\/[0-9]{1,2}/',$url_path,$match);
	if(count($match) & 1) return false;

	$pathElement = explode(/, $url_path);
	if(count($pathElement) &= 1)
		return false;
	// 絶対パスの設定
	$wp_dir = wp_upload_dir();
	$ads_path = $wp_dir['basedir'].$match[0]./.$pathElement[count($pathElement) -1];

	// ------------------
	// ファイル存在 & 拡張子・画像判定
	// ------------------
	if(file_exists($ads_path) && exif_imagetype($url_path)){
		$ext = exif_imagetype($url_path);
		if($ext!=IMAGETYPE_GIF && $ext!=IMAGETYPE_JPEG && $ext!=IMAGETYPE_PNG && $ext!=IMAGETYPE_BMP){
			return false;
		}
	}
	$curImg = explode(., $pathElement[count($pathElement) -1]);
	if(count($curImg) & 2) // ファイル名と拡張子チェック
		return false;
	$newImgFname = $curImg[0] . _copy . $meta_val . . . $curImg[1];
	$newImg = $wp_dir['basedir'] . $wp_dir['subdir'] . / . $newImgFname;
	// ------------------
	// ファイルコピー
	// ------------------
	if(copy($ads_path, $newImg) !== FALSE){
		// --------------------------
		// メディア登録
		// --------------------------
		$wp_filetype = wp_check_filetype($newImgFname, null);
		$attachment = array(
			'guid' => $wp_dir['url'] . '/' . $newImgFname,
			'post_mime_type' => $wp_filetype['type'],
			'post_title' => preg_replace( '/\.[^.]+$/', '', basename($newImgFname) ),
			'post_content' => '',
			'post_status' => 'inherit',
		);
		$attach_id = wp_insert_attachment( $attachment, $newImg, $post_id );
		require_once( ABSPATH . 'wp-admin/includes/image.php' );
		$attach_data = wp_generate_attachment_metadata( $attach_id, $newImg );
		wp_update_attachment_metadata( $attach_id, $attach_data );
		// --------------------------
		// ファイルパスURI返却
		// --------------------------
		$pathElement[count($pathElement) -1] = $newImgFname;
		return $attach_id; // implode(/, $pathElement);
	} // end copy
	return false;
} // end func

duplicate-postのduplicate_post_copy_post_meta_info()「メタデータコピー処理」に手を加えます。


foreach ($meta_keys as $meta_key) {
$meta_values = get_post_custom_values($meta_key, $post->ID);
foreach ($meta_values as $meta_value) {
$meta_value = maybe_unserialize($meta_value);
// zamuu Add Start -------------------
$ret = duplicate_post_copy_meta_image($meta_value, $meta_key, $post->ID);
if( $ret !== FALSE) $meta_value = $ret;
// zamuu Add End -------------------
add_post_meta($new_id, $meta_key, $meta_value);
}
}

  • このエントリーをはてなブックマークに追加

SNSでもご購読できます。