it-swarm.com.de

Die Paginierung funktioniert auf der Homepage nicht

Ich habe eine Seite namens "share" mit einer komplexen Schleife, die perfekt funktioniert. Diese Seite befindet sich unter domain.com/share. Jetzt muss ich diese Seite als Startseite verwenden, also ging ich zu "Einstellungen -> Lesen" und wählte diese Seite als statische Seite.

Das Problem ist jetzt, dass die Paginierung nicht mehr funktioniert. Auf der eigentlichen Seite wird domain.com/share/page/2 angezeigt, aber jetzt wird domain.com/page/2 angezeigt, und es wird immer derselbe Inhalt von der ersten Seite geladen, unabhängig davon, auf welcher Seite Sie sich befinden.

Ich habe keine weiteren Änderungen vorgenommen, nur diese Seite als Titelseite gewählt. Was sind die möglichen Lösungen hier?

Ich benutze WP Pagenavi, wenn das einen Unterschied macht.

Dies ist meine page.php Vorlage:

<?
$paged = get_query_var('paged') ? get_query_var('paged') : 1;

if (is_page('join')) $post_types = array('articles');
if (is_page('learn')) $post_types = array('actions');
if (is_page('share')) $post_types = array('articles', 'actions');

$category = get_query_var('category');
$type = get_query_var('type');

$args = array(
  'post_type' => $post_types,
  'paged' => $paged,
  'tax_query' => array('relation' => 'AND')
);

$taxonomies = array();
foreach ($post_types as $post_type) {
  foreach (get_object_taxonomies($post_type) as $tax) {
    if (array_search($tax, $taxonomies) === false) $taxonomies[] = $tax;
  }
}

foreach ($taxonomies as $taxonomy) {

  $all_terms = get_terms($taxonomy, array('fields' => 'names'));
  $query_terms = array(ucfirst($category), ucwords(str_replace('-', ' ', $type)));
  $cur_terms = array_values(array_filter(array_intersect($all_terms, $query_terms)));

  if (! empty($cur_terms)) {
    $args['tax_query'][] = array(
      'taxonomy' => $taxonomy,
      'terms' => empty($cur_terms) ? $all_terms : $cur_terms,
      'field' => 'slug'
    );
  }
}

if (is_page('join')) $args['posts_per_page'] = 36;

$query = new WP_Query($args);

get_header();
Theme::toolbar();
?>

<div class="center">
  <div id="content">
    <? if ($query->have_posts()): ?>
      <? while ($query->have_posts()): $query->the_post() ?>
        <? get_template_part('content') ?>
      <? endwhile ?>
    <? else: ?>
    <? endif ?>
  </div>
</div>

<?
wp_reset_query();
Theme::pagination($query);
get_footer();
?>

Und das ist der Paginierungscode in Theme:

function pagination($query = null)
{
  global $wp_query;
  if (empty($query)) $query = $wp_query;
  $is_paged = $query->max_num_pages > 1;
  ?>

  <? if ($is_paged): ?>
    <div class="center"><div id="pagination"><? wp_pagenavi(array('query' => $query)) ?></div></div>
  <? endif ?>

  <?
}
4
elclanrs

Ich hatte das gleiche Problem gehabt. Und schließlich habe ich das Problem gelöst.
Abrufen der aktuellen Paginierungsnummer

<?php  $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;  ?>

Um die aktuelle Paginierungsnummer auf einer statischen Titelseite (Seitenvorlage) zu erhalten, müssen Sie die Abfragevariable 'page' verwenden.

<?php  $paged = (get_query_var('page')) ? get_query_var('page') : 1;  ?>

Sie sollten also die get_query_var('page') anstelle von get_query_var('paged') verwenden.
Sie können die Funktion is_front_page() in if-Bedingung für die Frontpage-Abfrage verwenden. Genauso wie-

<?php
if(is_front_page()) {
    $paged = (get_query_var('page')) ? get_query_var('page') : 1;
}else {
    $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
}

Guthaben geht hier

4
Eh Jewel

Ich habe das nicht getestet, aber die WP Abfrage Seite sagt:

Paginierung Hinweis: Verwenden Sie get_query_var('page');, wenn Ihre Abfrage in einer Seitenvorlage funktionieren soll, die Sie als statische Startseite festgelegt haben.

Also, vielleicht brauchen Sie das:

$page_number = get_query_var('page') ? get_query_var('page') : 1;

[ ... ]

$args = array(
    'post_type' => $post_types,
    'page'      => $page_number,
    'tax_query' => array( 'relation' => 'AND' ),
);
2

Ich benutze diesen Code für die Paginierung. on index.php for loop;

<?php if ( have_posts() ) :  while ( have_posts() ) : the_post(); ?>
    // add title,excerpt or permalinks 
<?php endwhile; ?>
    <?php pagination(); ?>
<?php else : ?>
        <?php // no posts found message goes here ?>
<?php endif; ?>

als füge folgende Zeilen zu functions.php hinzu

function pagination() {

    if( is_singular() )
        return;

    global $wp_query;

    /** Stop execution if there's only 1 page */
    if( $wp_query->max_num_pages <= 1 )
        return;

    $paged = get_query_var( 'paged' ) ? absint( get_query_var( 'paged' ) ) : 1;
    $max   = intval( $wp_query->max_num_pages );

    /** Add current page to the array */
    if ( $paged >= 1 )
        $links[] = $paged;

    /** Add the pages around the current page to the array */
    if ( $paged >= 3 ) {
        $links[] = $paged - 1;
        $links[] = $paged - 2;
    }

    if ( ( $paged + 2 ) <= $max ) {
        $links[] = $paged + 2;
        $links[] = $paged + 1;
    }

    echo '<div class="navigation"><ul>' . "\n";

    /** Previous Post Link */
    if ( get_previous_posts_link() )
        printf( '<li>%s</li>' . "\n", get_previous_posts_link() );

    /** Link to first page, plus ellipses if necessary */
    if ( ! in_array( 1, $links ) ) {
        $class = 1 == $paged ? ' class="active"' : '';

        printf( '<li%s><a href="%s">%s</a></li>' . "\n", $class, esc_url( get_pagenum_link( 1 ) ), '1' );

        if ( ! in_array( 2, $links ) )
            echo '<li>…</li>';
    }

    /** Link to current page, plus 2 pages in either direction if necessary */
    sort( $links );
    foreach ( (array) $links as $link ) {
        $class = $paged == $link ? ' class="active"' : '';
        printf( '<li%s><a href="%s">%s</a></li>' . "\n", $class, esc_url( get_pagenum_link( $link ) ), $link );
    }

    /** Link to last page, plus ellipses if necessary */
    if ( ! in_array( $max, $links ) ) {
        if ( ! in_array( $max - 1, $links ) )
            echo '<li>…</li>' . "\n";

        $class = $paged == $max ? ' class="active"' : '';
        printf( '<li%s><a href="%s">%s</a></li>' . "\n", $class, esc_url( get_pagenum_link( $max ) ), $max );
    }

    /** Next Post Link */
    if ( get_next_posts_link() )
        printf( '<li>%s</li>' . "\n", get_next_posts_link() );

    echo '</ul></div>' . "\n";

}
0
ahmetlutfu

Sie setzen die Abfrage zurück, bevor Sie die Paginierung generieren. Sehen Sie sich die folgenden Codezeilen an:

wp_reset_query();
Theme::pagination($query);
get_footer();

Ich habe deswegen nicht weiter geschaut. Beheben Sie dieses Problem und prüfen Sie, ob es das Problem behebt.

0
cybmeta