WordPress

Domyślna liczba postów WP i paginacja WP są nieprawidłowe w przypadku postów typu niestandardowego

  • 20 grudnia, 2023
  • 4 min read
Domyślna liczba postów WP i paginacja WP są nieprawidłowe w przypadku postów typu niestandardowego


W zasadzie mam dwie kwestie:

  1. Liczba postów (wszystkie, opublikowane, wersje robocze itp.) niestandardowych postów typu post na stronie listy jest niepoprawna, co naprawiłem za pomocą niestandardowych kodów w plikufunctions.php poniżej:

     // Fix post counts
        function fix_post_counts($views) {
         global $current_user, $wp_query;
         unset($views['mine']);
         $types = array(
             array( 'status' =>  NULL ),
             array( 'status' => 'publish' ),
             array( 'status' => 'future' ),
             array( 'status' => 'draft' ),
             array( 'status' => 'pending' ),
             array( 'status' => 'trash' )
         );
         foreach( $types as $type ) {
             $query = array(
                 'author'      => $current_user->ID,
                 'post_type'   => 'my_post_type',
                 'post_status' => $type['status']
             );
             $result = new WP_Query($query);
             if( $type['status'] == NULL ):
                 $class = ($wp_query->query_vars['post_status'] == NULL)  ? ' class="current"' : '';
                 $views['all'] = sprintf(__('<a href="%s"'. $class  .'>Total <span class="count">(%d)</span></a>', 'all'),
                     admin_url('edit.php?post_type=my_post_type'),
                     $result->found_posts);
             elseif( $type['status'] == 'publish' ):
                 $class = ($wp_query->query_vars['post_status'] == 'publish') ? ' class="current"' : '';
                 $views['publish'] = sprintf(__('<a href="%s"'. $class .'>Published <span class="count">(%d)</span></a>', 'publish'),
                     admin_url('edit.php? post_status=publish&post_type=my_post_type'),
                     $result->found_posts);
             elseif( $type['status'] == 'future' ):
                 $class = ($wp_query->query_vars['post_status'] == 'future') ? ' class="current"' : '';
                 $views['future'] = sprintf(__('<a href="%s"'. $class .'>Scheduled <span class="count">(%d)</span></a>', 'publish'),
                     admin_url('edit.php? post_status=future&post_type=my_post_type'),
                     $result->found_posts);
             elseif( $type['status'] == 'draft' ):
                 $class = ($wp_query->query_vars['post_status'] == 'draft') ? ' class="current"' : '';
                 $views['draft'] = sprintf(__('<a href="%s"'. $class .'>Drafts'. ((sizeof($result->posts) > 1) ? "s" : "") .' <span class="count">(%d)</span></a>', 'draft'),
                     admin_url('edit.php?post_status=draft&post_type=my_post_type'),
                     $result->found_posts);
          /*   elseif( $type['status'] == 'pending' ):
                 $class = ($wp_query->query_vars['post_status'] == 'pending') ? ' class="current"' : '';
                 $views['pending'] = sprintf(__('<a href="%s"'. $class .'>Pendiente <span class="count">(%d)</span></a>', 'pending'),
                     admin_url('edit.php?post_status=pending&post_type=my_post_type'),
                     $result->found_posts);  */
             elseif( $type['status'] == 'trash' ):
                 $class = ($wp_query->query_vars['post_status'] == 'trash') ? ' class="current"' : '';
                 $views['trash'] = sprintf(__('<a href="%s"'. $class .'>Trash <span class="count">(%d)</span></a>', 'trash'),
                     admin_url('edit.php?post_status=trash&post_type=my_post_type'),
                     $result->found_posts);
             endif;
           }
           return $views;
         } 
    

Oto link referencyjny:

  1. Paginacja powyższych postów typu post na stronie listy również nie jest poprawna
Warto przeczytać!  6 wskazówek, jak tworzyć bardziej interaktywne formularze w WordPress

Mam problem z paginacją listy niestandardowych postów typu post; niestandardowy typ postu jest tworzony przez motyw WordPress. Paginacja nie pokazuje poprawnie numerów paginacji.

Na przykład na liście znajduje się 200 postów o niestandardowym typie postów, a domyślnie WP wyświetla tylko 10 postów, pokazuje 20 stron dostępnych do nawigacji. Ale jeśli zmienię liczbę postów na stronę za pomocą tego zapytania:

      $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
      $data= new WP_Query(array(
          'post_type'=>'my_post_type', // your post type name
          'posts_per_page' => 20,
          'paged' => $paged,
      ));

-liczba stron nawigacyjnych nadal wyświetla się 20 stron zamiast 200/20 = 10 stron, ponieważ przy powyższych kodach zmieniam liczbę postów na stronę na 20.

-I pierwszy problem wspomniany powyżej pokazuje, że posty nie liczą się poprawnie, tak jak przed naprawieniem.

Czy możesz doradzić, jak je poprawić, używając niestandardowych kodów w plikufunctions.php

Bardzo doceniam każdą pomoc.


Źródło