gpt4 book ai didi

php - 选择一个不重复的随机帖子

转载 作者:行者123 更新时间:2023-12-04 04:37:05 25 4
gpt4 key购买 nike

我只需要在我的 Wordpress 首页上显示大约 300 个帖子中的 1 个随机帖子。当我按刷新时,有时相同的帖子会在其他刷新后出现两次或很快。我可以实现类似 iTunes shuffle 模式的功能吗?我目前正在使用此代码:

<?php
$args = array( 'numberposts' => 1, 'orderby' => 'rand' );
$rand_posts = get_posts( $args );
foreach( $rand_posts as $post ) :
?>
<?php the_title(); ?>
<?php endforeach; ?>

最佳答案

这只是一个概念证明,但应该让你走上正轨。重要说明:

  • 必须在任何 HTML 输出发生之前设置 cookie
  • 我将cookie用作数组,也许它可以是逗号分隔的列表并使用 explode post__not_in 创建数组
  • 代码使用PHP 5.3+匿名函数,如果运行低版本必须更改
  • 当没有设置 cookie 时,您必须进行微调,很可能,我们需要做的是运行 get_posts再次没有 not_in过滤器

  • add_action( 'template_redirect', function()
    {
    # Not the front page, bail out
    if( !is_front_page() || !is_home() )
    return;

    # Used in the_content
    global $mypost;

    # Set initial array and check cookie
    $not_in = array();
    if( isset( $_COOKIE['shuffle_posts'] ) )
    $not_in = array_keys( $_COOKIE['shuffle_posts'] );

    # Get posts
    $args = array( 'numberposts' => 1, 'orderby' => 'rand', 'post__not_in' => $not_in );
    $rand_posts = get_posts( $args );

    # All posts shown, reset cookie
    if( !$rand_posts )
    {
    setcookie( 'shuffle_posts', '', time()-86400 );
    foreach($_COOKIE['shuffle_posts'] as $key => $value)
    {
    setcookie( 'shuffle_posts['.$key.']', '', time()-86400 );
    $id = 0;
    }
    }
    # Increment cookie
    else
    {
    setcookie( 'shuffle_posts['.$rand_posts[0]->ID.']', 'viewed', time()+86400 );
    $id = $rand_posts[0]->ID;
    }
    # Set the global, use at will (adjusting the 'bail out' above)
    $mypost = $id;
    return;

    ## DEBUG ONLY
    # Debug Results - remove the return above
    echo 'current ID:' . $id . "<br />";
    if( !isset( $_COOKIE['shuffle_posts'] ) )
    echo 'no cookie set';
    else
    var_dump($_COOKIE['shuffle_posts']);

    die();
    });

    add_filter( 'the_content', function( $content )
    {
    global $mypost;
    if( isset( $mypost ) )
    $content = '<h1>Random: ' . $mypost . '</h1>' . $content;
    return $content;
    });

    过滤器 the_content只是一个例子。 global $mypost可以在主题模板的任何地方使用(调整 bail out 后)。

    如果处理注册用户,我们可以将值存储在 user_meta 中,而不是 cookie。 .

    关于php - 选择一个不重复的随机帖子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19570119/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com