ユーザがアップロードした画像のみを表示させるおぼえがき

仕事でどうしても必要だったので久しぶりに深堀り。
特定多数のユーザが記事を投稿するようなサイトを構築する場合、アップロードしたメディア、特に画像が他の人がアップロードしたものも見えてしまう。
もちろん、削除や変更はできないのだけど、ずらーっと画像が並んでしまうとミスにもつながるので、自分がアップロードした画像のみが見えるように変更したかった。
ただ、いくかの記事を参考にトライしてみたけど、うまくゆかず。

で、色々としらべたところ、解決している記事を発見!

Media library to list images only user uploaded

記事のとおり、不要なコードを除いたらうまくうごきました。

ま、めったに使うことはないのだけど、覚書として。

/* * メディアの抽出条件にログインユーザーの絞り込み条件を追加する*/
	add_action('pre_get_posts','users_own_attachments');

	function users_own_attachments( $wp_query_obj ) 
	{
		global $current_user, $pagenow;
		if( !is_a( $current_user, 'WP_User') )
		return;
		if( !current_user_can('delete_pages') )
		$wp_query_obj->set('author', $current_user->id );
	return;
	}

Hawaii 2013

IMG_1441Photo by Riku

毎回そうだけど、内容が濃すぎて帰ってきてしばらくは放心状態というか、夢のなかというか・・。
行くとほとんどホノルルには居ないで、北、東、、。
今回借りた車の写真を撮るのを忘れたけど、かなり大きなシボレーのSUVで、アメリカの駐車場でもイッパイイッパイでした。

今回も結婚式がらみでのハワイツアーだけど、この手のツアーは自分の回を含めて4回目。
チビも3回目。

ただ、今までは小さすぎてほとんど記憶になかったハズなので、今回はようやく本人も楽しめたようです。
一番楽しかったのは、2つ年下のお友達と遊んだこと、きれいな海に入ったこと。少しだけ英語を話したこと。だそう。

もちろん、North Shoreのシュリンプ、コーヒーギャラリーにもいきました。
カイルアでは新しいパンケーキショップにもトライしました。

リクがレストランに入れるようになったので、ステーキハウスにもいきました。

ちょっとづつ思い出したくなったら追記します。
いろんなことを考えた旅でした。

ああ、、日本さむい・・。

Advanced Custom Fieldsでカテゴリごとのヘッダ画像・テキストの追加おぼえがき

WordPressをいじってる中で、ちょこちょこ出てくるのが、カテゴリごとにヘッダのテキストや画像を追加したいという要望。
通常のヘッダはそのままで、カテゴリ毎にちょっとしたテキストを入れたい場合はテンプレートを複製して、category-1.phpとかカテゴリIDを付けて対応する場合もあるし、画像だけだったらcssで画像のidを取得して振分ける方法もあるのだけど、今回は複数のカテゴリがあって、更にテキストも入れたい。ループの下に更に別のテキストも入れたい。
そして、実際に運用するのがクライアントだということもあって、汎用性を考えてAdvanced Custom Fieldsで対応します。

http://www.advancedcustomfields.com/

Advanced Custom Fieldsは前にもちょこっと書いたけど、カスタムフィールドをセットごとに作ることができて、更にそれをどこに使うかの指定ができるスグレモノのプラグインで、ここしばらくはほとんどのクライアントで使用しています。
最近は日本語にも対応してま~便利。ここまでくれば有料になってもお金払っちゃいます。


で、更に今回はカテゴリごとに対応させたいので、こんなかんじに名前をつけて、セットを作成します。
で、「位置」→「ルール」でカスタムフィールドを表示させる場所を指定します。「分類(追加・編集)」「カテゴリー」を選択すればこのカスタムフィールドのセットが投稿のカテゴリの部分に表示されるようになります。
テキストはテキストエリアを選ぶとhtmlも使えるので便利。

次は実際にカテゴリで値を入力。
カテゴリーの編集画面を見ると、ちゃんと下にカスタムフィールドが表示されてます。
これができると、ちょっとカテゴリを追加した場合も簡単にテキストや画像がここで設定できるので、テンプレートをいちいちいじらなくてOK。

で、最後は各フィールドを実際にテンプレートで呼び出す準備。
category.phpか、archive.phpにを編集。
このプラグインで呼び出す場合は

<?php the_field('フィールド名'); ?>

で値を取得できるのだけど、ループ外で呼び出す場合は、カテゴリのIDを取得しないと表示されませんでした。
なので、

<?php
  $cat_id = get_queried_object()->cat_ID;
  $post_id = 'category_'.$cat_id; 
  ?>
  <?php the_field('フィールド名',$post_id); ?>

こんなかんじにすればバッチリと表示されました。

というか、この覚書はこの部分を取っておきたかっただけ、、

これで、不要なテンプレートを量産しなくてすみます。

2016.3.9 追記:
画像のパスなどをACFで指定している場合、画像がないときに「?」となってしまいます。
そんな場合は下記のようにその値が入っている場合のみ表示するようにすれば解決できます(^^)

<?php if( get_field('image') ): ?><img src="<?php the_field('image'); ?>"><?php endif; ?>