WordPressのランダム記事の一覧をタイトルでなく、あえて抜粋でするのでR

WordPressには、関連記事を出す方法がいくつかあるのでR。

ソースをいじって実現する方法は、この記事にあるのでR。

プラグインで実現する方法は、この記事にあるのでR。

しかし、

関連記事を、あえてランダム記事としたいのでR。

プラグインではなくて、ソースをいじる場合は、

こちらが参考になるのでR。

single.phpか、content-single.phpを見て、挿入したい個所にうまく、

<div id="random-posts">
<h2>Random Post</h2>
<ul>
<?php $posts = get_posts('orderby=rand&numberposts=5'); foreach($posts as $post) { ?>
<li><a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><?php the_title(); ?></a></li>
<?php } ?>
</ul>
</div>

か、こちらのように、先のphpの部分を

<?php $args = array( 'numberposts' => 5, 'orderby' => 'rand', 'post_status' => 'publish', 'offset' => 1);
$rand_posts = get_posts( $args ); foreach( $rand_posts as $post ) : ?>
<li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
<?php endforeach; ?>

と記述すれば出るのでR。

ただし、

<?php the_title(); ?>

があるように、これはタイトルしか対応していないのでR。

そこで、

あえて、記事の最初部分の抜粋から、それをタイトルの代わりにしたいのでR。

<?php the_excerpt(); ?>

としたが、これはタイトルの代わりと違って、その投稿の抜粋しか、出ないのでR。

そこで調べたのでR。

それには

function.phpをいじることになるようでR。

function.phpをいじる際の注意は、この記事にあるのでR。

まず、こちらを参考にして、

function ltl_get_the_excerpt($post_id){
  global $post;
  $post_bu = $post;
  $post = get_post($post_id);
  $output = get_the_excerpt();
  $post = $post_bu;
  return $output;
}

を入れ、

<?php ltl_get_the_excerpt(); ?>

とするが、うまくでないのでR。

そこで、

<?php ltl_get_the_excerpt($post->ID); ?>

と引数を入れるも、これもだめでR。

調べると、

こちらの、setup_postdata() なる関数で、あらかじめ、なんかしないといけないようでR。

しかし、

これをこちらのように、function.phpのfunctionに入れると、

function get_the_excerpt( $post_id ){
  global $post;  
  $save_post = $post;
  $post = get_post($post_id);
  setup_postdata( $post ); // hello
  $output = get_the_excerpt();
  $post = $save_post;
  return $output;
}

でエラーとなるのでR。

そこで、single.phpか、content-single.phpにsetup_postdata()を入れ、下のようにすると、

<?php $args = array( 'numberposts' => 5, 'orderby' => 'rand', 'post_status' => 'publish', 'offset' => 1);
$rand_posts = get_posts( $args );
foreach( $rand_posts as $post ) : setup_postdata($post); ?>

<li><a href="<?php the_permalink(); ?>"><?php echo get_the_excerpt_id($post->ID); ?></a></li>

<?php endforeach; ?>

出たのでR。これを解決するまでに、随分と時間がかかったのでR。






この記事をシェアできます。

月額900円(税抜)から、高速・多機能・高安定レンタルサーバー『エックスサーバー』
WordPressの運用に特化したレンタルサーバー『wpXレンタルサーバー』