it-swarm.com.de

404 Fehler PageNavi benutzerdefinierten Typ Taxonomie | WordPress

Ich habe einen benutzerdefinierten Beitragstyp namens rock mit einer benutzerdefinierten Taxonomie namens genero. taxonomy-genero-curiosity.php

mypage/Rock/Neugier /

Wenn ich auf nachfolgende paginierte Seitenverknüpfungen klicke (z. B. [2], [3], [weiter])

mypage/Rock/Neugier/Seite/2

bringt mich zu einer 404-Seite.

    <?php
$paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;
//for a given post type, return all
$args = array(
    'tax_query' => array(
        array(
            'taxonomy' => 'genero', 
            'field' => 'slug', 
            'terms' => 'curiosity' 
        )
    ),
    'post_type'=>'',    //add your post type name 
    'posts_per_page' => 1, 
);
    $my_query = null;
    $my_query = new WP_Query($args);
if( $my_query->have_posts() ) {
  while ($my_query->have_posts()) : $my_query->the_post(); ?>
        <p><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a></p>
<?php
  endwhile;
}
wp_reset_query();  // Restore global post data stomped by the_post().
?>
 <?php wp_pagenavi( array( 'query' => $my_query ) ); ?>
            <?php wp_reset_postdata(); ?>

Wie kann ich das beheben? Was mache ich falsch?

EDIT

So registriere ich meinen Beitragstyp

function my_custom_post_product() {
  $labels = array(
    'name'               => _x( 'Rock', 'post type general name' ),
    'singular_name'      => _x( 'Rock', 'post type singular name' ),
    'add_new'            => _x( 'Add New', 'entry in rock' ),
    'add_new_item'       => __( 'Add New entry in rock' ),
    'edit_item'          => __( 'Modificar entry in rock' ),
    'new_item'           => __( 'New entry in rock' ),
    'all_items'          => __( 'all entry in rock' ),
    'view_item'          => __( 'see entry in rock' ),
    'search_items'       => __( 'search entry in rock' ),
    'not_found'          => __( 'Nothing entry in rock' ),
    'not_found_in_trash' => __( 'Nothing entry in rock on thrash' ),
    'parent_item_colon'  => '',
    'menu_icon' => get_bloginfo('template_directory'). '/images/my_menu_icon.png',
    'menu_name'          => 'Rock'
  );

  $args = array(
    'labels'        => $labels,
    'description'   => 'Introduzca un nueva entrada en rock',
    'public'        => true,
    'menu_position' => 5,
    'supports'      => array( 'title', 'editor', 'thumbnail', 'excerpt', 'comments' ),
    'has_archive'   => true,
    'hierarchical'  => true,
    'rewrite'   => array('slug' => 'Rock/%genero%', 'with_front' => false),
    'query_var'   => true,
    //'rewrite'   => true,
    //'publicly_queryable' => false,
  );
  register_post_type( 'Rock', $args );
}
add_action( 'init', 'my_custom_post_product' );

Und hier ist meine Schleife, wie sie jetzt steht. Ich erhalte immer noch den 404-Fehler mit diesem Code

<?php if (have_posts()) : while (have_posts()) : the_post(); ?>

    <header>
      <h2><a href="<?php the_permalink(); ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a></h2>
      <p><time datetime="<?php echo get_the_date(); ?>"><?php echo get_the_date(); ?></time>. <?php if ( comments_open() ) : ?><a class="comment" href="<?php the_permalink(); ?>#comments"><?php comments_number('0 Comments', '1 Comment', '% Comments'); ?></a><?php endif; ?></p>
    </header>

<?php endwhile; else: ?>
  <p><?php _e('Sorry, no posts matched your criteria.'); ?></p>
<?php endif; ?>


<nav class="paging">
  <?php if(function_exists('wp_pagenavi')) : wp_pagenavi(); else : ?>
    <div class="prev"><?php next_posts_link('&laquo; Previous Posts') ?></div>
    <div class="next"><?php previous_posts_link('Next Posts &raquo;') ?></div>
  <?php endif; ?>
</nav>

EDIT 2

Ich habe Camelcase "Rock" für "Rock" geändert und funktioniert, aber nur, wenn Sie die Konfiguration in Admin> Einstellungen> Lesen ändern und Post auf 5 setzen, wie die Anzahl der posts_per_page (in der Schleife), aber wenn ich Show brauche Es erscheint weniger Post auf einer anderen Seite, zum Beispiel post_per_page = 3 (z. B. [2], [next]) 404-Fehlerseite.

Gibt es eine Möglichkeit, die Nummer anzupassen, falls dies auf anderen Seiten erforderlich ist?

<?php $posts=query_posts($query_string . '&orderby=asc&posts_per_page=5'); if (have_posts()) : while (have_posts()) : the_post(); ?>
 <h2><a href="<?php the_permalink(); ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a></h2>
<?$content = get_the_excerpt();
echo substr($content, 0, 200);
global $post;
$text = $post->post_excerpt;?>

<?php endwhile; else: ?>

  <p><?php _e('Sorry, no posts matched your criteria.'); ?></p>
<?php endif; ?>
1
user3766356

Ihr Problem ist definitiv Ihre benutzerdefinierte Abfrage. Es gibt ein oder zwei Probleme mit Ihrer benutzerdefinierten Abfrage, die ich jetzt nicht behandeln werde. Sie sollten diese Seite (WP_Query) durcharbeiten, um eine benutzerdefinierte Abfrage ordnungsgemäß zu erstellen

Ihr eigentliches Problem hierbei ist, und die Frage, die Sie sich stellen müssen, ist die benutzerdefinierte Abfrage erforderlich? Und die direkte Antwort sollte ein festesNOsein. Benutzerdefinierte Abfragen sollten immer zugunsten der Hauptabfrage auf der Homepage und jeder Art von Archivseite vermieden werden. Die Hauptabfrage ist sehr spezifisch für die angeforderte Seite, was von Ihrer benutzerdefinierten Abfrage nicht repliziert wird.

Obwohl diese benutzerdefinierten Abfragen funktionieren, treten die eigentlichen Probleme auf, wenn Sie versuchen, zu paginieren, wie Sie es jetzt erlebt haben.

Das Basislayout mit der Standardschleife zum Anzeigen der Ergebnisse der Hauptabfrage für eine Vorlage sollte folgendermaßen aussehen

if( have_posts() ) {
    while( have_posts() ) {
        the_post();

        // CALL YOUR TEMPLATE TAGS

    }
} 

Die Bedingung if ist nicht immer erforderlich, wie bei den Vorlagen single.php und archive. Wie Sie sehen können,KEINEbenutzerdefinierten Abfragen.

Alle Änderungen, die Sie an der Hauptabfrage vornehmen müssen (mit Ausnahme von Seitenvorlagen, für die Sie eine benutzerdefinierte Abfrage ausführen müssen), können über pre_get_posts vorgenommen werden. Dies ist die richtige Methode, um die Abfrage einer Vorlage zu ändern. Weitere Informationen zu den oben genannten finden Sie in diesem Beitrag

Ihre Lösung wäre also, alle Teile Ihrer benutzerdefinierten Abfrage zu löschen und sie durch die oben angegebene Standardschleife zu ersetzen. Fügen Sie dazu einfach Ihre Schleifenobjekte und die HTML-Markierung hinzu, und Sie können dann wie gewohnt paginieren

EDIT

Nach dem Code aus Ihren Pasten sieht Ihre Abfrage jetzt gut aus. So soll es sein.

Ihre Hauptursache für all dies ist Ihr Beitragstyp Rock. Sie können camelcase nicht in benutzerdefinierten Beitragstypnamen verwenden (dies gilt für benutzerdefinierte Taxonomie- und Funktionsnamen). Sie sollten erwägen, Ihren benutzerdefinierten Beitragstyp in rock umzubenennen.

Denken Sie daran, Ihre Permalinks zu leeren und erneut zu leeren, um sicherzustellen, dass Ihre Änderungen wirksam werden, nachdem Sie Ihren benutzerdefinierten Post-Typ-Code aktualisiert haben

EDIT 2

Entweder hast du die verlinkten Beiträge nicht gelesen oder du hast einfach eine Selbstmord-Verknüpfung mit query_posts erstellt. Bitte lies den verlinkten Beitrag in dieser Antwort noch einmal. Sie solltenNIEMALSjemals query_posts verwenden.

Hinweis:Diese Funktion ist nicht für Plugins oder Themes vorgesehen. Wie später erläutert, gibt es bessere, leistungsfähigere Optionen zum Ändern der Hauptabfrage. Mit query_posts () kann die Hauptabfrage einer Seite übermäßig vereinfacht und problematisch geändert werden, indem sie durch eine neue Instanz der Abfrage ersetzt wird. Es ist ineffizient (führt SQL-Abfragen erneut aus) und schlägt unter bestimmten Umständen (besonders häufig bei Seitenumbrüchen) fehl.

Löschen Sie diese Zeile

 $posts=query_posts($query_string . '&orderby=asc&posts_per_page=5'); 

Diese Zeile ist die Wurzel Ihres Übels auf Ihrer Seite

Sie können die Paginierung pro Seite mit pre_get_posts ändern. Dies ist die richtige Methode. Wenn Sie die Anzahl der Posts nur auf Ihrer curiosity Term-Seite ändern müssen, können Sie Ihrer functions.php Folgendes hinzufügen ( Hinweis: Dies erfordert PHP 5.3+ )

add_action( 'pre_get_posts', function ($q ) {
    if( !is_admin() && $q->is_main_query() && $q->is_tax( 'genero', 'curiosity' ) ) {
       $q->set( 'posts_per_page', 3 );
       $q->set( 'order', 'ASC' );
    }
)};

EDIT 3

Für Versionen vor PHP 5.3 wurden die oben genannten Funktionen nur in PHP 5.3 eingeführt. Versuchen Sie für diese Versionen Folgendes

add_action( 'pre_get_posts', 'wpse170243_custom_ppp' );
function wpse170243_custom_ppp($q ) {
    if( !is_admin() && $q->is_main_query() && $q->is_tax( 'genero', 'curiosity' ) ) {
       $q->set( 'posts_per_page', 3 );
       $q->set( 'order', 'ASC' );
    }
}
0
Pieter Goosen

Rufen Sie das Navi an, bevor Sie die Abfrage zurücksetzen.

...

if (function_exists('wp_pagenavi')) wp_pagenavi(array('query' => $my_query));

wp_reset_query();  // Restore global post data stomped by the_post().

?>
1
shanebp

Versuchen Sie dies:

Fügen Sie diese custom_pagination () - Funktion zu Ihrer function.php-Datei hinzu

 function custom_pagination($numpages = '', $pagerange = '', $paged='') {

  if (empty($pagerange)) {
    $pagerange = 2;
}

  global $paged;
  if (empty($paged)) {
    $paged = 1;
    }
  if ($numpages == '') {
    global $wp_query;
    $numpages = $wp_query->max_num_pages;
    if(!$numpages) {
        $numpages = 1;
    }
}
  /** 
   * We construct the pagination arguments to enter into our paginate_links
   * function. 
   */
  $pagination_args = array(
    'base'               => get_pagenum_link(1) . '%_%',
    'total'              => $numpages,
    'current'            => $paged,
    'show_all'           => False,
    'end_size'           => 1,
    'mid_size'           => $pagerange,
    'prev_next'          => False,
    'prev_text'          => __('&laquo;' , 'Swift'),
    'next_text'          => __('&raquo;' , 'Swift'),
    'type'               => 'array',
    'add_args'           => false,
    'add_fragment'      => ''
  );

  $paginate_links = paginate_links($pagination_args);
  echo '<div class="Pagination-Num"><ul>';
        foreach ( $paginate_links as $paginate_link ) {
                 echo "<li> $paginate_link </li>";
            }
        echo '</ul></div>';

}

Rufen Sie custom_pagination () in Ihrer Post-Loop-Datei auf

<?php
    $paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;
    //for a given post type, return all
    $args = array(
        'tax_query' => array(
            array(
                'taxonomy' => 'genero', 
                'field' => 'slug', 
                'terms' => 'curiosity' 
            )
        ),
        'post_type'=>'',    //add your post type name 
        'posts_per_page' => 1, 
    );
        $my_query = null;
        $my_query = new WP_Query($args);
    if( $my_query->have_posts() ) {
      while ($my_query->have_posts()) : $my_query->the_post(); ?>
            <p><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a></p>
    <?php
      endwhile;

     if (function_exists(custom_pagination)) {
        custom_pagination($my_query->max_num_pages,"",$paged);
      }
    }
    wp_reset_query();  // Restore global post data stomped by the_post().
    ?>

      <?php wp_reset_postdata(); ?>

Ich denke, es wird gut funktionieren

0
Amit Mishra