wp_query random post

时间:2017-08-23 作者:adi kica

我想显示所有帖子,如mywebsite.com/postname/1/, mywebsite.com/postname/2/ ...... mywebsite.com/postname/7/ ..

下面的代码非常适合我,唯一的问题是它只显示第一篇帖子mywebsite.com/postname/...

我该怎么做?

<?php
/**
 * Template Name: Random Post
 * This template will only display the content you entered in the page editor
 */
?>

<html>
<head>

</head>
<body>

<?php
/*
Random Post Picker
Use on page to send viewer to random post optionally mod query
*/

// set arguments for WP_Query on published posts to get 1 at random
$args = array(
    \'post_type\' => \'post\',
    \'post_status\' => \'publish\',
    \'orderby\' => \'rand\',
    \'order\' => \'DESC\',

    // Using the date_query to filter posts from last week
    \'date_query\' => array(
        array(
            \'after\' => \'2 week ago\'
        )
    )
); 

// It\'s time! Go someplace random
$my_random_post = new WP_Query ( $args );

while ( $my_random_post->have_posts () ) {
  $my_random_post->the_post ();

  // redirect to the random post
  wp_redirect ( get_permalink () );
  exit;
}
?>

</body>
</html>

3 个回复
SO网友:Tom J Nowell

在PHP中执行此操作是一个糟糕的想法:

此页无法缓存随机排序extremely expensive 查询,包括创建临时数据库表和扫描,因为它必须复制整个posts表,然后随机重新排序posts,最后在销毁新表之前对其执行实际查询。这会导致资源耗尽攻击。例如,此命令将重复ping随机post URL。在足够多的计算机上运行足够多的时间,它将关闭您的数据库:

for i in `seq 1 20000`; do curl http://mywebsite.com/postname; done
如果您使用的是廉价的共享主机,那么在多个浏览器选项卡中同时调用URL可能足以引发问题。

更不用说重定向会发送HTTP标头,但代码会提前输出标记,因此标头已经发送,破坏了内容并触发PHP警告。

相反,可以执行按数据排序的常规查询,并将数据输出为JSON。然后在浏览器上的javascript中,随机选择其中一篇帖子并执行客户端重定向。

这样可以缓存页面,保护数据库,并且浏览器可以完成所有繁重的工作。数据库查询将为very 比较快

现在您的问题很简单,只需在列表中输出一点数据,在JS中从列表中随机选取一些内容,然后使用window.location= ... 重定向。无需WP知识

SO网友:Jitender Singh

由于您使用的是exit() 在您的循环中。在代码中,当WP\\u查询开始并在一个计数器后退出循环时。去除exit() 并使用此代码:

<?php
/*
 * Random Post Picker
 * Use on page to send viewer to random post optionally mod query
 */

// set arguments for WP_Query on published posts to get 1 at random
$args = array(
    \'post_type\' => \'post\',
    \'post_status\' => \'publish\',
    \'orderby\' => \'rand\',
    \'order\' => \'DESC\',

    // Using the date_query to filter posts from last week
    \'date_query\' => array(
        array(
            \'after\' => \'2 week ago\'
        )
    )
);

// It\'s time! Go someplace random
$my_random_post = new WP_Query ( $args );
if($my_random_post->have_posts()){
    while ( $my_random_post->have_posts () ) {
        $my_random_post->the_post ();
        echo \'<a href="\'.get_the_permalink().\'">\'.get_the_title().\'</a>\';
    }
}
?>

SO网友:Johansson

你不需要将用户重定向到随机帖子页面,即使你想也不行,因为你不能同时重定向到多个地方。

因此,只需在循环中输出随机帖子:

while ( $my_random_post->have_posts () ) {
  $my_random_post->the_post ();
  echo \'<a href="\'.get_the_permalink().\'">\'.get_the_title().\'</a>\';
}

结束

相关推荐

get_posts custom paging

我使用附件创建了对我的网站的搜索。每个附件都属于“图片”类别,因此我的搜索表单如下所示:<form method=\"get\" id=\"searchform\" action=\"<?php bloginfo(\'url\'); ?>\"> <input type=\"text\" name=\"s\" id=\"s\" value=\"Search...\" onfocus=\"if (this.value==\'Search...\') this.va