繁体   English   中英

WordPress的paginate_links仅在首页上有效

[英]Wordpress paginate_links only working on first page

我在Wordpress中遇到分页问题。 在我的网站上,我正在使用“ Daisycon联盟营销插件”插件。 我想显示存储在我网站上的自定义数据库表(由插件创建)中的产品。

这是可行的,但是我对分页有问题,无法正常工作。 愚蠢的事情是我让它正常工作,但是突然之间它似乎坏了,从那时起我无法发现发生了什么变化。

问题在于页面链接中使用的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.

?>

编辑:

多亏了其他论坛上的用户提示,我现在正在使用prepare correct。 但是,这仍然不能解决我的问题。 新代码是:

<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.

?>
<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;
add_query_arg( 'pagenum', $pagenum );
// 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
$big = 999999999;
$page_links = paginate_links( array(
'base' => str_replace( '/page/'.$big, '?pagenum=%#%', esc_url( get_pagenum_link( $big ) ) ),
'format' => '',
'prev_text' => __( '← Vorige', 'aag' ),
'next_text' => __( 'Volgende →', 'aag' ),
'total' => $num_of_pages,
'current' => max( 1, $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.

?>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM