サポート » 使い方全般 » 投稿記事内の指定文章にタグ付けをする

  • 解決済 wakaba

    (@wakaba)


    投稿記事の指定した文章にのみタグ付けすることは可能でしょうか。

    記事タイトル(1)
     タグ(A):文章(あいうえお)
     タグ(B):文章(かきくけこ)
     タグ(C):文章(さしすせそ)

    記事タイトル(2)
     タグ(A):文章(たちつてと)
     タグ(B):文章(なにぬねの)
    .
    .
    .

    別ページで、タグ指定された文章のみを表示させたいと考えています。
    タグ(A)
     文章(あいうえお)- 記事タイトル(1)
     文章(たちつてと)- 記事タイトル(2)

    よろしくお願いいたします。

14件の返信を表示中 - 1 - 14件目 (全14件中)
  • 記事タイトル(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>&nbsp;$match&nbsp;&minus;&nbsp;$title</div>";
        }
      }
    }
    wp_reset_postdata();

    マークアップはお好みで◎

    トピック投稿者 wakaba

    (@wakaba)

    記事は「新規投稿」から作成して自分ルールのタグ記法で記事を書いていくというのは理解できたのですが、「別ページで以下のように書けばOK」というのは、「固定ページ」を作成して以下のように書けばよいのでしょうか?

    別ページで、タグ指定された文章のみを表示させたい

    の別ページですね。

    トピック投稿者 wakaba

    (@wakaba)

    ありがとうございます。

    具体的には、固定ページもしくは別の投稿ページにて、タグ指定された文章のみを表示させたいのですが、以下のコードを書いても、コードがそのまま表示されてしまいます。これは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();

    モデレーター gatespace

    (@gatespace)

    固定ページの本文内に直接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)"]

    トピック投稿者 wakaba

    (@wakaba)

    ありがとうございます。

    ご教授頂いた内容で、固定ページにて「文章」は表示することができました。しかしながら、各文章の後に表示される「タイトル」が記事毎のタイトルではなく、固定ページのタイトルが表示されました。(くりかえし固定ページのタイトルが表示される)

    記事毎のタイトルを表示させることも可能でしょうか。よろしくお願いいたします。

    【現状】
    タグ(A)
     文章(あいうえお)- 固定ページタイトル
     文章(たちつてと)- 固定ページタイトル

    【要件】
    タグ(A)
     文章(あいうえお)- 記事タイトル(1)
     文章(たちつてと)- 記事タイトル(2)

    $title = get_the_title( $post );

    とか?

    トピック投稿者 wakaba

    (@wakaba)

    ご教授頂いた通り、以下のコードで動作いたしました。

    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;
    } );

    ありがとうございました。

    トピック投稿者 wakaba

    (@wakaba)

    ありがとうございました。

    トピック投稿者 wakaba

    (@wakaba)

    固定ページにて、タグ(A)が付いた文章と記事タイトルを以下のように表示することができるようになりました。

    タグ(A)
     文章(あいうえお)- 記事タイトル(1)
     文章(たちつてと)- 記事タイトル(2)

    当初の要望はクリアできたのですが、記事タイトルを表示するだけでなく、もとの記事へのリンクを持たせるにはどうすればいいのでしょうか。記事タイトル(1)をクリックすると、記事タイトル(1)のページへ遷移するようにしたいのですが、以下の部分を変えればいいような気がするくらいしかわからないため、ご教授頂けないでしょうか。

    $link = get_permalink( $post );

    でURLを取得して、

    $ret .= "<div> $match − $title $link</div>";

    で記事のURLも追加表示をするところまではできたのですが、URLを表示するのではなく、リンクとするにはどうすればいいのでしょうか。

    トピック投稿者 wakaba

    (@wakaba)

    解決しました。

    トピック投稿者 wakaba

    (@wakaba)

    トピック投稿者 wakaba

    (@wakaba)

    タグ付けされる文章が改行を含んでいたため、修飾子sを追加しました。

    if ( preg_match_all( "/<p\s+$tag\s*>(.+?)<\/p>/s", $content, $matches ) )

14件の返信を表示中 - 1 - 14件目 (全14件中)
  • トピック「投稿記事内の指定文章にタグ付けをする」には新たに返信することはできません。