页面链接仅在首页上工作(_L)

时间:2014-12-31 作者:content2value

我对分页有问题。在我的网站上,我正在使用插件“Daisycon affiliate marketing插件”。我想在我的网站上显示存储在自定义数据库表(由插件创建)中的产品。

这是工作,但我有一个问题,分页工作正常。愚蠢的是,我让它工作了,但突然它似乎坏了,我无法检测到自那以后发生了什么变化。

问题是页面链接中使用的URL仅在第一页上正确。因此,您可以从那里很好地导航到pagenum=2、pagenum=3等。但是:如果您当时在pagenum=2(例如),则显示的所有页面链接都链接到当前页面,因此指向pagenum=2。要了解我的意思,请参见示例http://www.online-medicijnen-bestellen.nl/afslanken-overgewicht/ 并尝试导航到下一页。

下面是我的代码。有人知道是什么导致了这一切吗?我已经花了几个小时寻找这个问题。说到PHP,我是一个相对的新手,所以请温柔和耐心;)

<form action="#" method="get" name="sorteer">
<select style="width:200px; float:right; margin-bottom:20px;" name="sortorder" onchange="this.form.submit()">
    <option value="">Sorteer op...</option>
    <option value="title ASC">Titel A-Z</option>
    <option value="price DESC">Hoogste prijs</option>
    <option value="price ASC">Laagste prijs</option>
</select>
</form>

<?php

global $wpdb;
// Nodig om de Wordpress database aan te kunnen spreken

$category   =   get_post_meta(get_queried_object_id(), \'Category\', true);
// De property Category van de pagina op basis waarvan de producten van die categorie worden opgevraagd

$sort       =   $_GET[\'sortorder\'];

// Haalt de gekozen optie van sortering op als URL-parameter

if ( empty($sort) ) {
$sortorder = "";
            } else {
$sortorder = "ORDER BY " . $sort;
            }
// Als er geen sorteeroptie is gekozen, sorteer dan niet, anders op basis van de gekozen sorteeroptie

$pagenum = isset( $_GET[\'pagenum\'] ) ? absint( $_GET[\'pagenum\'] ) : 1;
// Haal het pagina-nummer op als URL-parameter

$limit = 20;
// Dit bepaalt het aantal producten per pagina

$offset = ( $pagenum - 1 ) * $limit;
// Dit bepaalt welk product als eerste wordt getoond op de pagina

$prepared   =   $wpdb->prepare("SELECT * FROM productfeed WHERE category LIKE \'$category\' ". $sortorder ." LIMIT $offset, $limit");
// Beschermt de query tegen SQL-injectie

$entries = $wpdb->get_results($prepared);
// De SQL-query die de producten ophaalt (van de juiste categorie, op de gekozen manier gesorteerd en op basis van het pagina-nummer de juiste subset)

echo "<table class=product-list>";
foreach($entries as $product) {
    echo "<tr style=cursor:pointer onclick=window.open(\'".$product->link."\')>";
        echo "<td class=buy-image><img src=\'".$product->image."\'/></td>";
        echo "<td class=buy-text><button type=button class=buy-button>€ ".str_replace(".",",",$product->price)."</button><p class=title>".$product->title."</p><p>".$product->description."</p></td>";
    echo "</tr>"; 
}
echo "</table>";
// Hier wordt de tabel opgebouwd die de producten toont

$prepared2  =   $wpdb->prepare("SELECT COUNT(title) FROM productfeed WHERE category LIKE \'$category\'");
// Beschermt de query tegen SQL-injectie

$total = $wpdb->get_var($prepared2);
// Dit berekent het totaal aantal producten in deze categorie

$num_of_pages = ceil( $total / $limit );
// Dit berekent op basis van het totaal aantal producten en het aantal producten per pagina, hoeveel pagina\'s er moeten komen

$page_links = paginate_links( array(
\'base\' => add_query_arg( \'pagenum\', \'%#%\' ),
\'format\' => \'\',
\'prev_text\' => __( \'← Vorige\', \'aag\' ),
\'next_text\' => __( \'Volgende →\', \'aag\' ),
\'total\' => $num_of_pages,
\'current\' => $pagenum
) );
// Deze array bevat alle pagina-links en bijbehorende attributen

if ( $page_links ) {
echo \'<div class="tablenav"><div class="tablenav-pages" style="margin: 1em 0">\' . $page_links . \'</div></div>\';
}
// Als er pagina-links zijn, zet ze dan op deze manier neer.

?>

edit:

@米洛感谢您提供的有关使用“准备正确的方法”的提示。我改了。然而,它仍然没有解决问题。我现在使用的代码是:

<form action="#" method="get" name="sorteer">
<select style="width:200px; float:right; margin-bottom:20px;" name="sortorder" onchange="this.form.submit()">
    <option value="">Sorteer op...</option>
    <option value="title ASC">Titel A-Z</option>
    <option value="price DESC">Hoogste prijs</option>
    <option value="price ASC">Laagste prijs</option>
</select>
</form>

<?php

global $wpdb;
// Nodig om de Wordpress database aan te kunnen spreken

$category   =   get_post_meta(get_queried_object_id(), \'Category\', true);
// De property Category van de pagina op basis waarvan de producten van die categorie worden opgevraagd

$sort       =   $_GET[\'sortorder\'];
// Haalt de gekozen optie van sortering op als URL-parameter

if ( empty($sort) ) {
$sortorder = "title ASC";
            } else {
$sortorder = $sort;
            }
// Als er geen sorteeroptie is gekozen, sorteer dan niet, anders op basis van de gekozen sorteeroptie

$pagenum = isset( $_GET[\'pagenum\'] ) ? absint( $_GET[\'pagenum\'] ) : 1;
// Haal het pagina-nummer op als URL-parameter

$limit = 20;
// Dit bepaalt het aantal producten per pagina

$offset = ( $pagenum - 1 ) * $limit;
// Dit bepaalt welk product als eerste wordt getoond op de pagina

$prepared   =   $wpdb->prepare( "SELECT * FROM productfeed WHERE category LIKE %s ORDER BY %s LIMIT %d, %d", $category, $sortorder, $offset, $limit);
// Beschermt de query tegen SQL-injectie

$entries = $wpdb->get_results($prepared);
// De SQL-query die de producten ophaalt (van de juiste categorie, op de gekozen manier gesorteerd en op basis van het pagina-nummer de juiste subset)

echo "<table class=product-list>";
foreach($entries as $product) {
    echo "<tr style=cursor:pointer onclick=window.open(\'".$product->link."\')>";
        echo "<td class=buy-image><img src=\'".$product->image."\'/></td>";
        echo "<td class=buy-text><button type=button class=buy-button>€ ".str_replace(".",",",$product->price)."</button><p class=title>".$product->title."</p><p>".$product->description."</p></td>";
    echo "</tr>"; 
}
echo "</table>";
// Hier wordt de tabel opgebouwd die de producten toont

$prepared2  =   $wpdb->prepare( "SELECT COUNT(title) FROM productfeed WHERE category LIKE %s", $category);
// Beschermt de query tegen SQL-injectie

$total = $wpdb->get_var($prepared2);
// Dit berekent het totaal aantal producten in deze categorie

$num_of_pages = ceil( $total / $limit );
// Dit berekent op basis van het totaal aantal producten en het aantal producten per pagina, hoeveel pagina\'s er moeten komen

$page_links = paginate_links( array(
\'base\' => add_query_arg( \'pagenum\', \'%#%\' ),
\'format\' => \'\',
\'prev_text\' => __( \'← Vorige\', \'aag\' ),
\'next_text\' => __( \'Volgende →\', \'aag\' ),
\'total\' => $num_of_pages,
\'current\' => $pagenum
) );
// Deze array bevat alle pagina-links en bijbehorende attributen

if ( $page_links ) {
echo \'<div class="tablenav"><div class="tablenav-pages" style="margin: 1em 0">\' . $page_links . \'</div></div>\';
}
// Als er pagina-links zijn, zet ze dan op deze manier neer.

?>

1 个回复
SO网友:andiivii

今天早些时候,我实际上正在处理同一个问题。我比较了我为一个使用paginate_links() 几周前(它工作的地方)和我今天工作的网站(它不工作的地方)发现了交易破坏者:当你将base或format参数中的页码与url参数相关联时,你必须在你的参数中定义add\\u args。

它可以非常简单,只需将空数组分配给add_args. 下面的代码适用于您。

$page_links = paginate_links( array(
    \'base\'      => add_query_arg( \'pagenum\', \'%#%\' ),
    \'format\'    => \'\',
    \'prev_text\' => __( \'← Vorige\', \'aag\' ),
    \'next_text\' => __( \'Volgende →\', \'aag\' ),
    \'total\'     => $num_of_pages,
    \'current\'   => $pagenum,
    \'add_args\'  => array(),
) );

结束

相关推荐

Pagination and Related Posts

是否可以对嵌入在single中的以下相关POST代码使用分页。我的主题的php。 <?php // for use in the loop, list 5 post titles related to first tag on current post $tags = wp_get_post_tags($post->ID); if ($tags) { $first_tag = $