web-dev-qa-db-ja.com

最新の2つの投稿を表示するためのショートコードの作り方

任意のページへの最後の3つの投稿を表示するショートコードを作成したいのですが…。

それはこのようにレイアウトされるべきです

タイトル

抜粋...もっと読む

このコードをfunction.phpに追加しました

function my_recent_post()
 {
  global $post;

  $html = "";

  $my_query = new WP_Query( array(
       'post_type' => 'post',
       'posts_per_page' => 2
  ));

  if( $my_query->have_posts() ) : while( $my_query->have_posts() ) : $my_query->the_post();

       $html .= "<h2>" . get_the_title() . " </h2>";
       $html .= "<p>" . get_the_excerpt() . "</p>";
       $html .= "<a href=\"" . get_permalink() . "\" class=\"button\">Read more</a>";

  endwhile; endif;

  return $html;
 }
 add_shortcode( 'recent', 'my_recent_post' );

私のホームページでは、必要に応じて2つの投稿が部門で表示されていますが、問題はコンテンツの下、つまりショートコードの付いた部門の下にあり、2番目の記事全体が表示されます。

助言がありますか?

the problem

2
user54779

whileループの後に wp_reset_postdata() を追加します。

        endwhile;
    wp_reset_postdata();
endif;

これにより、ショートコードの実行後に actual currentの投稿が復元され、テンプレートタグに正しいデータが表示されるようになります。

2
TheDeadMedic

enter code herestrongテキストあなたがこれを試してください。

function my_recent_post()
 {
  global $post;

  $html = "";

  $my_query = new WP_Query( array(
       'post_type' => 'post',
       'posts_per_page' => 2
  ));

  if( $my_query->have_posts() ) : while( $my_query->have_posts() ) : $my_query->the_post();

  $html.= get_template_part( 'content', 'excerpt' );


  endwhile; endif;

  return $html;
 }
 add_shortcode( 'recent', 'my_recent_post' ); ?>

 **<h1>create a php file content-excerpt.php and place in your theme</h1>

code of that file is**


<article id="post-<?php the_ID(); ?>">  

    <header class="entry-header">
        <h2><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></h2>
        </div>
    </header>

    <div class="entry-excerpt">
        <?php the_excerpt(); ?>
    </div>
    <a href="<?php get_permalink() ?>" class="button">Read more</a>
</article>
0
TBI Infotech