めっちゃ楽になる。ハマると強い。
やりたいこと
カスタム投稿でレビュー記事を投稿しまくっていたとする。
レビュー記事にはカスタムフィールドを設定していて、画像やらステータスやら色々入力してある。
LPを作ることになって、そこに任意のレビューを掲載することになった。タイトルと本文だけでなくカスタムフィールドに入力した内容も表示したい。ベタ打ちは面倒だし、どうにか引っ張ってこれないか。
タグにページIDを入れたら別ページ情報は簡単に出力できるけど、IDをいちいち拾ってくるのはめんどくさい。URLからIDに変換できたら楽だよね?っていう。
それをやる。
作例
SmartCustomFieldsを使って構築するとする。
出力したいページにカスタムフィールドを用意する。取得したいページのURLを記入できるようにして、ついでに繰り返しで仕込めば増減が任意でやれて楽だよねってことで、そんな感じでやっていくとする。
出力元の記事には画像(image)、文章(textarea)、短文(text)のカスタムフィールドがあって、それらと件名、本文も出力するとする。
出力先では繰り返しのグループ名を「url_list」、urlのフィールド名を「url」でやっていくとする。
こんな感じになる。
<?php
$repeat = SCF::get('url_list');
foreach($repeat as $fields):
$postid = url_to_postid($fields['url']);
$img = wp_get_attachment_url(SCF::get('image', $postid));
$txtarea = nl2br(SCF::get('textarea', $postid));
$text = SCF::get('text', $postid);
$title = get_the_title($postid);
$content_post = get_post($postid);
$content = $content_post->post_content;
$content = apply_filters('the_content', $content);
$content = str_replace(']]>', ']]&gt;', $content);
?>
<h2><?php echo $title; ?></h2>
<article><?php echo $content; ?></article>
<img src="<?php echo $img; ?>" alt="">
<p><?php echo $txtarea; ?></p>
<p><?php echo $txt; ?></p>
<?php endforeach; ?>
url_to_postid()が今回の肝。中にURLを放り込むだけでIDを出力してくれるので、ことWPにおいては応用がめっちゃ効く。
ID指定で他ページのタイトルと本文を引っ張ったことがなかったのでちょっと手間取った。特に本文は色々書くんですね。
サイト上にあるものと同じ内容をわざわざ手打ちするのは馬鹿らしいって人にお勧め。
コメント