画像のリクエストURIから親ポスト、親ポストの投稿タグを取得して、ログイン有無と合わせて分岐

  • タグ:
  • タグはありません
require( ABSPATH . WPINC . '/capabilities.php' );
require( ABSPATH . WPINC . '/user.php' );
require( ABSPATH . WPINC . '/formatting.php' );
require( ABSPATH . WPINC . '/meta.php' );
wp_plugin_directory_constants( );
ms_cookie_constants(  );
wp_cookie_constants( );
require( ABSPATH . WPINC . '/pluggable.php' );

//リクエストされている画像のURLを取得する
$image_uri =  $_SERVER['REQUEST_URI'];
$image_url = 'http://example.jp' . $image_uri;

// そのURLの画像が紐づいているポストのIDを取得する
// postsテーブルからURLでpost_parentを検索
$parent_post_id = $wpdb->get_var($wpdb->prepare( "SELECT post_parent FROM $wpdb->posts WHERE guid = '$image_url';" ));

// そのポストIDを持つ投稿にくっついているタグ(open/closed)を取得する
// term_relationshipsテーブルで、ポストIDにくっついているterm_taxonomy_idを把握する
$parent_tax_id = $wpdb->get_col($wpdb->prepare( "SELECT term_taxonomy_id FROM $wpdb->term_relationships WHERE object_id = '$parent_post_id';" ));

// そのterm_taxonomy_idが2なら公開、3なら非公開なのです。
// in_arrayで3が含まれる→TRUE(つまり非公開)
$open_flag = in_array('3', $parent_tax_id);

// 非ログインかつ非公開タグが付いている場合に404
if ( !is_user_logged_in() && $open_flag ) {
	status_header(404);
	die('No images displayed when the owner sets closed');
}