无法按变量增加POSTS_PER_PAGE

时间:2017-02-20 作者:Duck of Death

我正在将产品列表加载到存档类型页面上,并创建一个自定义查询。我想创建一个“加载更多”功能,以便单击列表底部的“加载更多”按钮加载接下来的10个产品。

我认为这就像使用变量设置“posts\\u per\\u page”一样简单,只需在单击按钮时将其增加10。然而,我得到了奇怪的结果。这段代码不是最终的代码,只是为了说明这个问题。

if(isset( $_POST[\'load-next-amount\'] )){
     $pageamount = 10
}
 else {
     $pageamount = 5;   
 }
因此,第一次加载时,它将解析为false,因为按钮还没有被单击,所以posts\\u per\\u page将设置为5。然后,当单击按钮时,您预计将加载10,但由于某些原因,它将继续加载5。但是,如果我将代码更改为:

if(isset( $_POST[\'load-next-amount\'] )){
     $pageamount = 4
}
 else {
     $pageamount = 5;   
 }
它将加载4。因此,我无法通过此变量增加每页的posts\\u数量,但我可以减少它。奇怪的

以下是我的疑问:

$myArgs = array(
        \'category\'         => \'\',
        \'category_name\'    => \'\',
        \'orderby\'          => \'meta_value_num\',
        \'order\'            => \'ASC\',
        \'include\'          => \'\',
        \'exclude\'          => \'\',
        \'meta_key\'         => \'_price_per_1hr_lesson\',
        \'meta_value\'       => \'\',
        \'post_type\'        => \'job_listing\',
        \'post_mime_type\'   => \'\',
        \'post_parent\'      => \'\',
        \'post__in\' => $what,
        \'author\'       => \'\',
        \'author_name\'      => \'\',
        \'post_status\'      => \'publish\',
        \'job_listing_region\'  => "\'" . $city . "\'",
        \'post_status\'      => \'publish\',
        \'posts_per_page\' => $pageamount,
        \'suppress_filters\' => true 
    );
    $myquery = new WP_Query( $myArgs );
更新:使用print\\r,我可以看到正确的值被分配给变量,并且该值被正确分配给“posts\\u per\\u page”。无论出于何种原因,它都会忽略它,除非它小于先前指定的值。例如,如果我将else语句设置为$pageamount=20,则第一次加载页面时将有20个,然后如果我单击按钮(将变量发送到脚本,即10),则将加载10个。只要少于20篇,它就可以加载任意数量的帖子。

很明显,WP中有设置默认值之类的东西。对WP来说还是有点新手,所以我不知道。看着wp\\U配置,我什么都没看到。

2 个回复
最合适的回答,由SO网友:nibnut 整理而成

好吧,我想我知道发生了什么。。。

根据WP pagination parameters 文档,posts\\u per\\u页确实是缓存的。有点基本上,您可以在第一次将其设置为“10”,然后再设置为5,但随后使用“offset”或“paged”参数来获取所需的帖子。

您的“load next amount”变量只是一个计数器,您想访问其中的“offset”或“page”。。。

使用偏移量,您可以传递等于“0”、“1”、“2”和。。。

$myArgs = array(
    \'category\'         => \'\',
    \'category_name\'    => \'\',
    \'orderby\'          => \'meta_value_num\',
    \'order\'            => \'ASC\',
    \'include\'          => \'\',
    \'exclude\'          => \'\',
    \'meta_key\'         => \'_price_per_1hr_lesson\',
    \'meta_value\'       => \'\',
    \'post_type\'        => \'job_listing\',
    \'post_mime_type\'   => \'\',
    \'post_parent\'      => \'\',
    \'post__in\' => $what,
    \'author\'       => \'\',
    \'author_name\'      => \'\',
    \'post_status\'      => \'publish\',
    \'job_listing_region\'  => "\'" . $city . "\'",
    \'post_status\'      => \'publish\',
    \'posts_per_page\' => 10, // <--------
    \'offset\' => 10 + (intVal($_POST[\'load-next-amount\']) * 5), // <--------
    \'suppress_filters\' => true 
);
$myquery = new WP_Query( $myArgs );
希望这有帮助!

SO网友:David Lee

每次赋值时,需要求和,前一个值加上新值5 此外,如果页面正在刷新(我不确定您是否在使用ajax),则需要保持该值,如下所示:

if(isset( $_POST[\'load-next-amount\'] )){
     //the previous value plus 5
     $previous_value = $_POST[\'load-next-amount\'];
     $pageamount = $previous_value + 5; 
}
 else {
     $pageamount = 5;   
 }
在按钮的URL中,需要放置var,如下所示:

<a href="?load-next-amount=<?php echo $pageamount; ?>"> Load More </a>

相关推荐

无法在模板函数.php中使用IS_HOME

我试图在标题中加载一个滑块,但只在主页上加载。如果有帮助的话,我正在使用Ultralight模板。我正在尝试(在template functions.php中)执行以下操作:<?php if ( is_page( \'home\' ) ) : ?> dynamic_sidebar( \'Homepage Widget\' ); <?php endif; ?> 但这行不通。现在,通过快速的google,我似乎需要将请