値 – インクループ株式会社|神奈川県相模原市 ホームページ制作、WEBマーケティング https://incloop.com インクループ株式会社は、お客様の顧客獲得をマーケティングを活用して支援する会社です。 データ分析、市場調査に基づく企画立案、コンテンツ制作、運用を通じてお客様の目標を実現します。 Thu, 19 Nov 2020 00:59:16 +0000 ja hourly 1 https://wordpress.org/?v=4.9.19 カスタム投稿の指定タクソノミー(カテゴリ)の投稿記事のカスタムフィールドのラベルと値を取得する https://incloop.com/%e3%82%ab%e3%82%b9%e3%82%bf%e3%83%a0%e6%8a%95%e7%a8%bf%e3%81%ae%e3%82%ab%e3%82%b9%e3%82%bf%e3%83%a0%e3%83%95%e3%82%a3%e3%83%bc%e3%83%ab%e3%83%89%e3%81%ae%e5%80%a4%e3%82%92%e5%8f%96%e5%be%97/ https://incloop.com/%e3%82%ab%e3%82%b9%e3%82%bf%e3%83%a0%e6%8a%95%e7%a8%bf%e3%81%ae%e3%82%ab%e3%82%b9%e3%82%bf%e3%83%a0%e3%83%95%e3%82%a3%e3%83%bc%e3%83%ab%e3%83%89%e3%81%ae%e5%80%a4%e3%82%92%e5%8f%96%e5%be%97/#respond Mon, 19 Dec 2016 11:12:11 +0000 https://incloop.com/?p=9862 カスタム投稿のラベルと値を取得する_アイキャッチ

ネット上で見かける言葉を誤解したまま使うことが稀にあります、網干です。 数年前は’lol̵ […]]]>
カスタム投稿のラベルと値を取得する_アイキャッチ

ネット上で見かける言葉を誤解したまま使うことが稀にあります、網干です。

数年前は’lol’(笑いを意味する英語スラング)を知り合い同士でよく使っていましたが、これは両手を上げるほど笑ってしまう顔文字(?)なのだと理解して使い続けていました。
(本来は’Laughing Out Loud’の頭文字だけを抜いたものらしいです)

最近は’wtf’をよく見かけるのでどこかで使うことを考えていたのですが、しっかりとした意味を知りませんでした。

「驚き」を表すときに使うのだろう 程度に考えていたのですが、意味は少し違うようです。

WTFは「what the fuck」の略で、「何だこれ!」というニュアンスになり、ネットやメールでよく使われています。
しかし単純に何かを見て驚いているという訳ではなく、状況によってWTFのニュアンスは変わってきます。

WTFは主に三つの状況で使う事が出来ます。それは、混乱した時、怒った時、同情する時です。

出典:WTFの意味とは、WTFというネット用語の三つの使い方 | 英語 with Luke

なるほど、使うタイミングによっては怒っている事を伝えてしまうみたいです。
仮に使うタイミングが来たとしても、fuckという単語は失礼なので言い方を変える必要がありそうですね。

誤用する前に調べて良かったです。

と、よくわからない前置きから入りましたが…
今回は「指定投稿タイプの指定カテゴリの投稿のカスタムフィールドのラベルと値を取得する」方法を記載します。

今回の投稿を読むことでカスタムフィールドの値を取得して表示できるようになります

今回の記事を読む事で、下記のようにカスタムフィールドの値を取得して表示できるようになります。

カスタム投稿のフィールドのラベルとフィールドの値を取得して、テーブルを作るショートコードを作ってしまいます。

カスタムフィールドのラベルと値を取得

functions.phpにカスタムフィールドの情報を取得するプログラムを記述する

functions.phpに下記のコードを記述します。

<?php
/********************************************************************/
/* 関数名:getPostInEditPost                                        */
/* 概要  :指定投稿タイプの指定カテゴリの投稿を投稿日昇順に出力する */
/* 引数1 :getposttype      => 投稿タイプのスラッグ                 */
/* 引数2 :getpostnum       => 投稿の最大表示数                     */
/* 引数3 :gettaxonomy      => タクソノミーの指定                   */
/* 引数4 :gettaxonomyslag  => タクソノミーのスラッグの指定         */
/* 備考  :引数を指定しない場合はデフォルトの値で動作します         */
/********************************************************************/
function getPostInEditPost($atts) {
	extract(shortcode_atts(array(
		'getposttype' => 'post',		// 投稿タイプのスラッグ(デフォルトは'post')
		'getpostnum' => '5',			// 記事の最大表示数(デフォルトは'5')
		'gettaxonomy' => 'category',	// タクソノミーの指定(デフォルトは'category')
		'gettaxonomyslag' => '未分類'	// タクソノミーのスラッグ(デフォルトは'未分類')
	), $atts));
	
	// 指定投稿タイプの指定カテゴリーの記事を取得
	$getPosts = get_posts('post_type='. $getposttype. '&numberposts=' .$getpostnum. '&order=DESC&orderby=post_date&taxonomy='. $gettaxonomy. '&term='. $gettaxonomyslag);	
	
	// カウンタ
	$iCnt = 0;
	
	// 記事がある?
	if($getPosts) {
		// 記事の個数分繰り返す
		foreach($getPosts as $getPosInfo) :
			// 二つ目以降の記事には間に<br>タグをつける
			if( $iCnt > 0 ) {
				$retHtml .= '<br />';
			}
			// 記事がある場合↓
			$retHtml .= '<div class="getPostArea">';
			
			// カスタム投稿のキーを取得
			$getCustomPostKeyArray = get_post_custom_keys($getPosInfo->ID);
			// 投稿タイトル取得
			$getPostTitle = get_the_title($getPosInfo->ID);
			
			// タイトル設定
			$retHtml .= '<h2>'. $getPostTitle. '</h2>';
			
			// テーブル開始
			$retHtml .= '<table class="getPostInfo"><tbody>';
			
			// ラベルと値を設定
			$retHtml .= '<tr class="getPostInfoTable"><td class="getPostInfoTableItem">フィールドラベル</td><td class="getPostInfoTableItem">フィールドの値</td></tr>';
			
			// 投稿の内容を全て出力
			foreach($getCustomPostKeyArray as $item => $keyVal) :
				// キーの文字列を取得
				$trimKeyVal = trim($keyVal);
				// キーの文字列の先頭が'_'の場合は処理しない
				if( '_' == $trimKeyVal{0} ) {
					continue;
				}
				
				// フィールドラベル取得
				$getFieldObj = get_field_object($trimKeyVal, $getPosInfo->ID);
				$label = $getFieldObj['label'];
				
				// キーの値を取得
				$keyVal = get_post_meta($getPosInfo->ID, $trimKeyVal, true);
				
				// ラベルと値を設定
				$retHtml .= '<tr class="getPostInfoTable"><td class="getPostInfoTableItem">'. $label. '</td><td class="getPostInfoTableItem">'. $keyVal. '</td></tr>';
				
			endforeach;
			
			// テーブル終了
			$retHtml .= '</tbody></table>';
			
			$retHtml .= '</div>';
			$iCnt++;
			
		endforeach;
	} else {
		// 記事がない場合↓
		$retHtml.='<p>記事がありません。</p>';
	}
	
	return $retHtml;
}
// 呼び出しの指定
add_shortcode('scPostInEditPost', 'getPostInEditPost');
?>

プログラムは以上になります。
では次に、本プログラムの使い方を記載します。

ショートコードで記事タイプ、記事数、タクソノミ、タームを指定して投稿記事を表示する

紹介したプログラムは、ショートコードで表示内容を指定することができます。
具体的には、下記のように指定します。

[scPostInEditPost getposttype="投稿タイプのスラッグ" getpostnum="記事の最大投稿数" gettaxonomy="タクソノミーの名称" gettaxonomy="タクソノミーのスラッグ"]

とはいっても、指定する内容は各々の設定で異なりますので、WordPressの設定を確認する必要があります。

確認するための例として、下図のようなカスタム投稿を作成しました。
カスタム投稿の例

上記の場合の「投稿タイプのスラッグ」「タクソノミーの名称」「タクソノミーのスラッグ」の確認方法を下記に記載します。

「投稿タイプのスラッグ」の確認方法

投稿タイプのスラッグは投稿メニューのURLに記載されています。
例の場合は「post_type=test_post」と記載されている箇所の「test_post」の部分が投稿タイプのスラッグになります。
投稿タイプのスラッグ取得

「タクソノミーの名称」の確認方法

タクソノミーの名称はタクソノミーメニューのURLに記載されています。
例の場合は「taxonomy=test_taxonomy」と記載されている箇所の「test_taxonomy」の部分がタクソノミーの名称になります。
タクソノミーの名称取得

「タクソノミーのスラッグ」の確認方法

タクソノミーのスラッグはタクソノミーのメニューに記載されています。
例の場合は一覧で表示されている項目の「test_term_in_taxonomy」の部分がタクソノミーのスラッグになります。
タクソノミーのスラッグ

 

例のような構成の場合に、カスタム投稿の「てすとたくそのみーの中のたーむ」の記事を抜き出したい場合は、下記のショートコードで表示が可能になります。

[scPostInEditPost getposttype="test_post" gettaxonomy="test_taxonomy" gettaxonomy="test_term_in_taxonomy"]

更に、記事の最大表示数を’5’に設定したい場合は下記のように記載します。

[scPostInEditPost getposttype="test_post" getpostnum="5" gettaxonomy="test_taxonomy" gettaxonomy="test_term_in_taxonomy"]

上記のショートコードを実行すると、下図のような内容が出力されます。
カスタムフィールドのラベルと値を表示

※ちなみに、今回の表示に使用したCSSの設定は下記になります。

.getPostInfoTableItem {
    background: #fff;
}

.getPostInfo .getPostInfoTable:nth-of-type(1) {
    font-weight: bold;
}

.getPostInfo .getPostInfoTable:nth-of-type(1) .getPostInfoTableItem {
    background-color: rgb(255, 145, 80);
}

今回は以上になります。

 

いかがでしたか?

今回紹介したプログラムをそのまま使うことはないと思いますが、カスタム投稿の内容を抜き出す際の参考にはなると思います。
少し気になるのは、キーから値を取得する部分が少し回りくどいというか…スマートな方法ではない気がします。

スマートな方法が分かった際にはブログに追記しようと思います。

ではまた!

この記事であなたの課題を解決することができましたか?

疑問点があったり、解決できなかったことがありましたら、お気軽にご相談してください。

]]>
https://incloop.com/%e3%82%ab%e3%82%b9%e3%82%bf%e3%83%a0%e6%8a%95%e7%a8%bf%e3%81%ae%e3%82%ab%e3%82%b9%e3%82%bf%e3%83%a0%e3%83%95%e3%82%a3%e3%83%bc%e3%83%ab%e3%83%89%e3%81%ae%e5%80%a4%e3%82%92%e5%8f%96%e5%be%97/feed/ 0