2

この関数を使用して、ランダムな投稿にリダイレクトしています。同じランダムな投稿が2回続けて表示されるのを防ぐメカニズムを見つけようとしています。誰かがヒントを与えることができますか?

function sofa_view_random_post() {

    // make array of all posts IDs
    $q = get_posts('numberposts=-1');
    $array = array();
    foreach($q as $p) {
        $array[] = $p->ID;
    }

    // randomize array to get random post
    $k = array_rand($array);
    $v = $array[$k];
    wp_redirect( get_permalink( $v ) ); exit;

}

最初にすべての投稿IDを取得し、それらを配列に配置します。配列をランダム化して値を取得します。ただし、同じ値がトリガーされないようにする方法がわかりません。

4

2 に答える 2

1

セッションを使用します。最後に使用したIDをセッションデータに保存し、可能な投稿のリストを作成するときに、その投稿をリストから省略します。

このような:

function sofa_view_random_post() {

    // Initialise last post value as NULL if missing    
    if (!isset($_SESSION['last_post'])) {
        $_SESSION['last_post'] = NULL;
    }

    // Make array of all posts IDs except last viewed
    $q = get_posts('numberposts=-1');
    $array = array();
    foreach ($q as $p) {
        if ($p->ID !== $_SESSION['last_post']) {
            // Only add this ID if it's not the last viewed post
            $array[] = $p->ID;
        }
    }

    // Get random post ID and store it in the session
    $k = array_rand($array);
    $_SESSION['last_post'] = $v = $array[$k];

    // Redirect user
    wp_redirect( get_permalink( $v ) );
    exit;

}
于 2012-06-27T19:13:15.640 に答える
1

前の結果をセッションに保存し、それを再度選択しないように注意してください。

if( !isset( $_SESSION['last_random_post'])) {
    $_SESSION['last_random_post'] = -1;
}

do {
    $k = array_rand( $array);
} while( $k == $_SESSION['last_random_post']);

$_SESSION['last_random_post'] = $k;

これがWordPressに具体的にどのように適用されるかはわかりませんが、簡単に適応できるはずです。

完全を期すために、上記のコードを組み込んだ関数を次に示します。

function sofa_view_random_post() {

    if( !isset( $_SESSION['last_random_post'])) {
        $_SESSION['last_random_post'] = -1; // Or null, as long as its an invalid ID
    }

    // make array of all posts IDs
    $q = get_posts('numberposts=-1');
    $array = array();
    foreach($q as $p) {
        $array[] = $p->ID;
    }

    // randomize array to get random post
    do {
        $k = array_rand( $array);
    } while( $k == $_SESSION['last_random_post']);

    $_SESSION['last_random_post'] = $k;

    $v = $array[$k];
    wp_redirect( get_permalink( $v ) ); exit;
}
于 2012-06-27T19:11:11.327 に答える