ホームページには3日ごとに異なる(ランダムな)投稿を表示したいセクションがあります。
その方法を見つけようとしています。これは私たちに毎週の投稿をするでしょう、しかし私は3日ごとに投稿を受ける方法を知りません...:
<?php
global $post;
$args = array(
'post_type' => 'girls_tips',
'posts_per_page' => 1,
'no_found_rows' => true,
'offset' => (date( 'W' ) - 1)
);
$posts = get_posts($args);
foreach($posts as $post):
setup_postdata($post);
?>
<h2><?php the_title(); ?></h2>
<?php endforeach; ?>
任意の助けは大歓迎です!乾杯、
あなたのコード例は、ランダムではありません、しかし、それは週番号に基づく固定オフセットです。
すでに述べたように、これはクエリAPIで表現できるものではありません。
次のようなアルゴリズムで状態を追跡する必要があるでしょう。
これを試してください - それはあなたのニーズに合うはずです。注意を払う、私はやっとそれをテストしました...ライブのライブ環境でそれを使用する前にあなた自身をテストしてください。
// calculate times
$second = 1;
$minute = $second * 60;
$hour = $minute * 60;
$day = $hour * 24;
$days = $day * 3;
$time = time(); //get current timestamp
$random_post_timestamp = get_option('my_random_post_timestamp'); //get timestamp of queried post
if( $random_post_timestamp ) {
$diff = $time - $random_post_timestamp;
if( $diff >= $days ) { // if timestamp older than 3 days, delete the option
delete_option('my_random_post');
delete_option('my_random_post_timestamp');
}
}
if( get_option('my_random_post') ) { // is there a option with my id?
//yes, it shoukd be used in my query
$args = array( 'p' => get_option('my_random_post') );
} else {
//no, query a new one
$args = array(
'post_type' => 'post',
'posts_per_page' => 1,
'limit' => 1,
'orderby' => 'Rand',
'meta_key' => 'already_shown_in_random',
'meta_compare' => 'NOT EXISTS' //only query posts that don't have a the 'already_shown_in_random' meta
);
}
// the query
$random_post = new WP_Query($args);
if( $random_post->have_posts() ):
while( $random_post->have_posts() ): $random_post->the_post();
if( !get_option('my_random_post') ) { //if not already populated, store my id and the current timestamp in the options
add_option('my_random_post', get_the_id() );
add_option('my_random_post_timestamp', time() );
add_post_meta( get_the_id() , 'already_shown_in_random', 'yes'); //add a post meta so that this post isnt queried a second time
}
/* DO YOUR STUFF HERE!!!!! */
endwhile;
wp_reset_postdata();
endif;
それは Rarst が以前の答えで持っていたことを行います...