Como faço para criar uma publicação aleatória que durará um dia

Como faço para criar uma publicação aleatória, mas não deve ser alterada quando a página é atualizada

Eu quero uma publicação aleatória que durará um dia e depois de 24 horas ou por dia, mudará aleatoriamente a postagem, será possível? ou há um plugin que exatamente faz isso,

Na verdade, o que estou tentando criar é como uma “Dica aleatória para o dia”, você sabe algo assim

Espero que alguém compreenda minha pergunta

Por favor ajude, qualquer ajuda será apreciada.

Solutions Collecting From Web of "Como faço para criar uma publicação aleatória que durará um dia"

Aqui está algum código fazendo o que você pediu e usando as idéias que outros destacaram:

< ?php if ( false === ( $totd_trans_post_id = get_transient( 'totd_trans_post_id' ) ) ) { $args = array('numberposts' => 1, 'orderby' => 'rand'); $totd = get_posts($args); $midnight = strtotime('midnight +1 day'); $timenow = time(); $timetillmidnight = $midnight - $timenow; echo $midnight; echo ",".$timenow; set_transient('totd_trans_post_id', $totd[0]->ID, $timetillmidnight); } else { $args = array('post__in' => array($totd_trans_post_id)); $totd = get_posts($args); } foreach( $totd as $post ) : setup_postdata($post); ?> 
< ?php the_title(); ?> < ?php the_content(); ?>
< ?php endforeach; ?>

get_posts () help Plus da maneira que eu codifiquei, deve fazer a mensagem Tip of the Day mudar à meia-noite todos os dias.

Isso pode ser melhorado, porque estamos mostrando aleatoriamente não há nada interrompendo a mesma publicação mostrando duas vezes seguidas …

Um transiente parece ser um esforço extra. Em vez disso, basta usar o fato de que a function RAND do MySQL pode ser semeada para números randoms reprodutíveis.

Use uma function como esta:

 function force_random_day_seed($orderby) { $seed = floor( time() / DAY_IN_SECONDS ); $orderby=str_replace('RAND()', "RAND({$seed})", $orderby); return $orderby; } 

Então, em torno de seu WP_Query ou get_posts ou seja o que for que você tenha recuperado esta única publicação, use este código de filtro:

 add_filter('posts_orderby', 'force_random_day_seed'); $args = array('numberposts' => 1, 'orderby' => 'rand'); $totd = get_posts($args); remove_filter('posts_orderby', 'force_random_day_seed'); 

Isso adiciona o filtro, obtém a publicação e, em seguida, remove o filtro.

Ao configurar a semente para um número que muda uma vez por dia, o random produzirá a mesma resposta a cada vez para esse dia. Então, dará um número random diferente cada DAY_IN_SECONDS passa.

Sem transientes, não há necessidade de armazenamento de dados.

Atualização para o WordPress 4.5+

O pedido por random, contendo um valor de semente, agora é suportado no WordPress 4.5+:

 $rand = sprintf( 'RAND(%d)', floor( time() / DAY_IN_SECONDS ) ); $args = array( 'numberposts' => 1, 'orderby' => $rand ); $totd = get_posts($args); 

Consulte o número de passagem nº 35692 para obter mais informações.

Você pode usar a API de Transientes, como disse Kaiser. Basta armazenar uma ID de publicação aleatória com uma vida útil de 24h. Para selecionar uma publicação aleatória, você pode definir o argumento orderby de get_posts() para "rand" .

Exemplo de exemplo de uso:

 function wpse17056_twentyfour_sticky_post() { $transient = get_transient( 'twentyfour_sticky_post' ); // set transient if none is present if ( false === $transient ) { $rand_post = get_posts( array( 'numberposts' => 1, 'orderby' => 'rand') ); set_transient( 'twentyfour_sticky_post', $rand_post[0]->ID, DAY_IN_SECONDS ); } } add_action( 'init', 'wpse17056_twentyfour_sticky_post', 0 ); 

Interaja com a API de Transientes . Você poderia append algo como “pegajoso” a ele ou uma categoria ou termo específico.