投稿記事内の指定文章にタグ付けをする
-
記事タイトル(1)
<p data-tag="A">あいうえお</p> <p data-tag="B">かきくけこ</p>
記事タイトル(2)
<p data-tag="A">あいうえお</p>
とかなんとか自分ルールのタグ記法で記事を書いて、別ページで以下のように書けばOK。
$tag = 'data-tag="A"'; // タグ(A)を指定 echo '<div>タグ(A)</div>'; $tagged_posts = get_posts( array( 's' => $tag, 'posts_per_page' => -1, // 全件取得 ) ); foreach ( $tagged_posts as $post ) { setup_postdata( $post ); $content = apply_filters( 'the_content', get_the_content() ); if ( preg_match_all( "/<p\s+$tag\s*>(.+?)<\/p>/", $content, $matches ) ) { $title = get_the_title(); foreach ( $matches[1] as $match ) { echo "<div> $match − $title</div>"; } } } wp_reset_postdata();
マークアップはお好みで◎
記事は「新規投稿」から作成して自分ルールのタグ記法で記事を書いていくというのは理解できたのですが、「別ページで以下のように書けばOK」というのは、「固定ページ」を作成して以下のように書けばよいのでしょうか?
ありがとうございます。
具体的には、固定ページもしくは別の投稿ページにて、タグ指定された文章のみを表示させたいのですが、以下のコードを書いても、コードがそのまま表示されてしまいます。これはPHPページに書かないといけないのですよね。直接固定ページに書き込んで利用する方法はございますでしょうか。
$tag = ‘data-tag=”A”‘; // タグ(A)を指定
echo ‘<div>タグ(A)</div>’;
$tagged_posts = get_posts( array(
‘s’ => $tag,
‘posts_per_page’ => -1, // 全件取得
) );
foreach ( $tagged_posts as $post ) {
setup_postdata( $post );
$content = apply_filters( ‘the_content’, get_the_content() );
if ( preg_match_all( “/<p\s+$tag\s*>(.+?)<\/p>/”, $content, $matches ) ) {
$title = get_the_title();
foreach ( $matches[1] as $match ) {
echo “<div> $match − $title</div>”;
}
}
}
wp_reset_postdata();固定ページの本文内に直接PHPコードは書けません。
(そういうプラグインもあるのですが、おすすめできる方法ではないので書きません)PHPはショートコードにして、固定ページにはそのショートコードを貼り付けるのはどうでしょう?
http://wpdocs.sourceforge.jp/%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%B3%E3%83%BC%E3%83%89_API記事にPHPを書きたくなったらショートコードの出番です。
以下、未検証なので頑張って動くようにしてみてください。テーマの functions.php 辺りに書く:
add_shortcode( 'tagged_posts', function( $atts = array() ) { extract( shortcode_atts( array( 'tag' => '', 'title' => '' ), $atts ) ); $ret = '<div>' . esc_html( $title ) . '</div>'; $tag = 'data-tag="' . $tag . '"'; $tagged_posts = get_posts( array( 's' => $tag, 'posts_per_page' => -1, // 全件取得 ) ); foreach ( $tagged_posts as $post ) { setup_postdata( $post ); $content = apply_filters( 'the_content', get_the_content() ); if ( preg_match_all( "/<p\s+$tag\s*>(.+?)<\/p>/", $content, $matches ) ) { $title = get_the_title(); foreach ( $matches[1] as $match ) { $ret .= "<div> $match − $title</div>"; } } } wp_reset_postdata(); return $ret; } );
固定ページに書き込む:
[tagged_posts tag="A" title="タグ(A)"]
ありがとうございます。
ご教授頂いた内容で、固定ページにて「文章」は表示することができました。しかしながら、各文章の後に表示される「タイトル」が記事毎のタイトルではなく、固定ページのタイトルが表示されました。(くりかえし固定ページのタイトルが表示される)
記事毎のタイトルを表示させることも可能でしょうか。よろしくお願いいたします。
【現状】
タグ(A)
文章(あいうえお)- 固定ページタイトル
文章(たちつてと)- 固定ページタイトル【要件】
タグ(A)
文章(あいうえお)- 記事タイトル(1)
文章(たちつてと)- 記事タイトル(2)ご教授頂いた通り、以下のコードで動作いたしました。
add_shortcode( 'tagged_posts', function( $atts = array() ) { extract( shortcode_atts( array( 'tag' => '', 'title' => '' ), $atts ) ); $ret = '<div>' . esc_html( $title ) . '</div>'; $tag = 'data-tag="' . $tag . '"'; $tagged_posts = get_posts( array( 's' => $tag, 'posts_per_page' => -1, // 全件取得 ) ); foreach ( $tagged_posts as $post ) { setup_postdata( $post ); $content = apply_filters( 'the_content', get_the_content() ); if ( preg_match_all( "/<p\s+$tag\s*>(.+?)<\/p>/", $content, $matches ) ) { $title = get_the_title( $post ); foreach ( $matches[1] as $match ) { $ret .= "<div> $match ( $title ) </br>"; } } } wp_reset_postdata(); return $ret; } );
ありがとうございました。
固定ページにて、タグ(A)が付いた文章と記事タイトルを以下のように表示することができるようになりました。
タグ(A)
文章(あいうえお)- 記事タイトル(1)
文章(たちつてと)- 記事タイトル(2)当初の要望はクリアできたのですが、記事タイトルを表示するだけでなく、もとの記事へのリンクを持たせるにはどうすればいいのでしょうか。記事タイトル(1)をクリックすると、記事タイトル(1)のページへ遷移するようにしたいのですが、以下の部分を変えればいいような気がするくらいしかわからないため、ご教授頂けないでしょうか。
$link = get_permalink( $post );
でURLを取得して、
$ret .= "<div> $match − $title $link</div>";
で記事のURLも追加表示をするところまではできたのですが、URLを表示するのではなく、リンクとするにはどうすればいいのでしょうか。
- トピック「投稿記事内の指定文章にタグ付けをする」には新たに返信することはできません。