Domanda

Sto usando get_posts e get_comments di costruire diversi cicli sulla pagina, a cui sto avendo alcuni problemi in impaginazione.

Ho i messaggi globali opzione pagina (Impostazioni> lettura) insieme a al 10 , e questo sembra variare il problema. A partire da ora, posso facilmente arrivare a Pagina 2 - http : //dev.ashfame.com/author/ashfame/page/2/ , ma Pagina 3 restituisce un 404

.

Se abbasso il valore globale, che arriva ad avere pagine più impaginati ma non tutti (numero minore rispetto a quanti ci dovrebbe essere).

Aggiornamento: Ho appena provato a installare la mia impostazione personalizzata da 2 (e quello globale troppo), e WordPress dovrebbe impaginare fino 4 (ho 7 elementi per mostrare), ma ora lo fa, ma anche 5 e 6. 7 404 . Perché? Come risolve questa cosa adesso?

Progress: @ t31os mi ha aiutato a capire che la sua la query predefinita WP sulla pagina, che sta allestendo l'impaginazione per quella pagina. Ora mi viene in mente un modo per uccidere la query WP predefinita in quella pagina (ma come?) E poi come faccio a impaginare ulteriormente la author.php ? O c'è qualche altro modo per farlo?

Codice attuale:

<?php

            $author_details = $wp_query->get_queried_object();

            // Posts Per Page option
            // $ppp = get_option('posts_per_page');
            $ppp = 1; //custom setting, if you want to obey the global setting here, comment this line and uncomment the above line

            if (!is_paged()) {
                $custom_offset = 0;
            } else {
                $custom_offset = $ppp*($paged-1);
            }

            echo '<h1>Author ID : '.$author_details->ID.', Page : '.$paged.', Custom Offset : '.$custom_offset.'</h1>';

            ?>

            <h2>Articles</h2>

            <?php
            $args = array(
            'numberposts' => $ppp,
            'offset' => $custom_offset,
            'category' => 7,
            'author' => $author_details->ID
            );

            $posts_data = get_posts( $args );

            // print_r($posts_data);

            if ( count( $posts_data ) > 0 ) {               
                echo '<ul>';                
                foreach ( $posts_data as $post ) {                      
                    echo '<li><a href="'.get_permalink( $post->ID ).'">'.$post->post_title.'</a></li>';
                }               
                echo '</ul>';
            } else {
                echo '<p>No articles by this user</p>';
            }           
            ?>

            <h2>Journals</h2>

            <?php
            $args = array(
            'numberposts' => $ppp,
            'offset' => $custom_offset,
            'category' => 6,
            'author' => $author_details->ID
            );
            $posts_data = get_posts( $args );

            // print_r($posts_data);

            if ( count( $posts_data ) > 0 ) {               
                echo '<ul>';                
                foreach ( $posts_data as $post ) {                      
                    echo '<li><a href="'.get_permalink( $post->ID ).'">'.$post->post_title.'</a></li>';
                }               
                echo '</ul>';
            } else {
                echo '<p>No journals by this user</p>';
            }
            ?>

            <h2>Questions</h2>

            <?php
            $args = array(
            'numberposts' => $ppp,
            'offset' => $custom_offset,
            'category' => 3, // parent category ID is enough
            'author' => $author_details->ID
            );
            $posts_data = get_posts( $args );

            // print_r($posts_data);

            if ( count( $posts_data ) > 0 ) {               
                echo '<ul>';                
                foreach ( $posts_data as $post ) {                      
                    $category_array = get_the_category( $post->ID );
                    $category_name = $category_array[0]->name;
                    $category_permalink = get_category_link( $category_array[0]->term_id );
                    echo '<li><a href="'.get_permalink( $post->ID ).'">'.$post->post_title.'</a>
                    <br />In: <a href="'.$category_permalink.'">'.$category_name.'</a><br />'.get_comments_number( $post->ID ).' Answers</li>';
                }               
                echo '</ul>';
            } else {
                echo '<p>No questions by this user</p>';
            }
            ?>

            <h2>Answers</h2>

            <?php
            $args = array(
            'user_id' => $author_details->ID,
            'number' => $ppp,
            'offset' => $custom_offset,
            'status' => 'approve'
            );
            $answers_list = get_comments( $args );

            // print_r($answers_list);

            if ( count( $answers_list ) > 0 ) {
                $date_format = get_option( 'date_format' );
                echo '<ul>';
                foreach ( $answers_list as $answer ) {
                    echo '<li>Answer: '.substr( $answer->comment_content, 0, 20 ).'..<br />'.date( $date_format, strtotime( $answer->comment_date ) ).'<br />Question: <a href="'.get_permalink( $answer->comment_post_ID ).'">'.get_the_title( $answer->comment_post_ID ).'</a></li>';
                }
                echo '</ul>';
            } else {
                echo '<p>No answers by this user</p>';
            }
            ?>
È stato utile?

Soluzione

t31os dice: [Vedi la storia di modifica per il codice precedente e commenti]

Utilizzo di Ajax per impaginare il tuo query

ho messo insieme un po 'di codice che verrà a prendere i tuoi post e commenti tramite la tecnologia AJAX utilizzando semplici prev / next navigazione tramite la tecnologia AJAX.

1) Sostituire tutto il codice che avete inviato in author.php con il seguente ..

<?php $cat_settings = array( 'Articles' => 7, 'Journals' => 6, 'Questions' => 3 ); ?>
<?php do_action( 'author_ajax_catposts', $cat_settings ); ?>

2) Creare un file javascript nel directory chiamata authorposts.js del vostro tema e inserire il seguente codice in quel file.

jQuery(document).ready( function($) {

    if( 'undefined' == typeof( aacVars ) )
        return;

    $('.aacnav').click(function() {

        var r = $( $(this).attr('href') );
        var a = $( $(this).attr('href') + '-ap' );
        var c = this.className.split(' ');

        if( 
            'undefined' == typeof( c ) || 
            'undefined' == typeof( r ) || 
            'undefined' == typeof( a ) 
        )
            return false;

        var d = { 
            action:      aacVars.posts_action, 
            _ajax_nonce: aacVars.nonce,
            author:      aacVars.author,
            category:    $(this).attr('href')
        };

        p = parseInt( a.text() );
        c = c.pop();

        switch( c ) {
            case 'aacnext':
                if( r.children('p.nomore').length )
                    return false;
                d.page = p + 1;
            break;
            case 'aacprev':
                if( p < 2 )
                    return false;
                d.page = p - 1;
            break;
            default:
                return false;
        }

        $.post( aacVars.ajaxpth, d, function( res ) {
            if( '-1' == res ) {
                alert( 'auth failed' );
                return false;
            }
            $( r ).html( res );
            $( a ).text( d.page );
        });

        return false;
    });

    $('.aacnavc').click(function() {

        var r = $( '#aac-comments' );
        var n = $( '#aac-comments-ap' );
        var l = $(this).attr('href');

        if( 
            'undefined' == typeof( n ) || 
            'undefined' == typeof( r ) 
        )
            return false;

        var d = { 
            action:      aacVars.comments_action, 
            _ajax_nonce: aacVars.nonce,
            author:      aacVars.author
        };

        p = parseInt( n.text() );

        switch( l ) {
            case '#next':
                if( r.children('p.nomore').length )
                    return false;
                d.page = p + 1;
            break;
            case '#prev':
                if( p < 2 )
                    return false;
                d.page = p - 1;
            break;
            default:
                return false;
        }

        $.post( aacVars.ajaxpth, d, function( res ) {
            if( '-1' == res ) {
                alert( 'auth failed' );
                return false;
            }
            r.html( res );
            $( n ).text( d.page );
        });

    });

});

3) Copia il seguente codice nel vostro tema del functions.php file.

class Author_Ajax_Cats {

    private $posts_per_page    = 3;
    private $comments_per_page = 1;
    private $posts_action      = 'aac-posts';
    private $comments_action   = 'aac-comments';
    private $js                = array();

    public function __construct() {

        add_action( 'parse_request',                            array( $this, 'aac_parse_request' ) );
        add_action( 'wp_ajax_nopriv_' . $this->posts_action,    array( $this, 'aac_ajax_posts' ) );
        add_action( 'wp_ajax_' .        $this->posts_action,    array( $this, 'aac_ajax_posts' ) );
        add_action( 'wp_ajax_nopriv_' . $this->comments_action, array( $this, 'aac_ajax_comments' ) );
        add_action( 'wp_ajax_' .        $this->comments_action, array( $this, 'aac_ajax_comments' ) );
        add_action( 'wp_enqueue_scripts',                       array( $this, 'aac_enqueue_scripts' ) );
        add_action( 'author_ajax_catposts',                     array( $this, 'aac_print_posts' ) );
    }
    public function aac_parse_request( $wp ) {

        if( !isset( $wp->query_vars['author_name'] ) || is_admin() )
            return;

        $wp->query_vars['paged'] = 1;

    }
    private function setup_js_vars() {

        global $wp_query;

        $this->js['author']          = $wp_query->get_queried_object_id();
        $this->js['posts_action']    = $this->posts_action;
        $this->js['comments_action'] = $this->comments_action;
        $this->js['nonce']           = wp_create_nonce( 'noncekey' );
        $this->js['ajaxpth']         = admin_url( 'admin-ajax.php' );
    }
    public function aac_enqueue_scripts() {

        if( !is_author() )
            return;

        $this->setup_js_vars();

        wp_register_script( 'author-ajax', get_bloginfo('stylesheet_directory') . '/authorposts.js', array( 'jquery' ), time(), true );
        wp_localize_script( 'author-ajax', 'aacVars', $this->js );
        wp_enqueue_script( 'author-ajax' );
    }
    public function aac_ajax_comments() {

        if( !isset( $_POST['page'] ) || !isset( $_POST['author'] ) )
            die;

        check_ajax_referer( 'noncekey' );

        $authID = absint( $_POST['author'] );
        $paged  = absint( $_POST['page'] );

        $args = array(
            'user_id' => $authID,
            'number'  => $this->comments_per_page,
            'offset'  => ( ( $paged - 1 ) * $this->comments_per_page ),
            'status'  => 'approve',
            'type'    => 'comment'
        );

        $answers_list = get_comments( $args );
        if( empty( $answers_list ) ) {
            printf( '<p class="nomore">%s</p>', __( 'No more answers by this user.' ) );
            die;
        }
        $_comment_walk = new Walker_Comment;

        echo '<ul>';
        $_comment_walk->paged_walk( $answers_list, 0, 1, $this->comments_per_page, array( 
            'style' => 'ul', 
            'avatar_size' => 15, 
            'max_depth' => 1, 
            'callback' => array( $this, 'author_comment_walker' ) 
        ) );
        echo '</ul>';

        die;
    }
    public function aac_ajax_posts() {

        if( !isset( $_POST['page'] ) || !isset( $_POST['category'] ) || !isset( $_POST['author'] ) )
            die;

        check_ajax_referer( 'noncekey' );

        $catID  = absint( str_replace( '#aac-', '', $_POST['category'] ) );
        $authID = absint( $_POST['author'] );
        $paged  = absint( $_POST['page'] );

        $args = array(
            'paged'       => $paged,
            'numberposts' => $this->posts_per_page,
            'author'      => $authID,
            'cat'         => $catID
        );
        $posts = get_posts( $args );

        if( empty( $posts ) )
            die( sprintf( '<p class="nomore">%s</p>', __( 'No more posts.' ) ) );

        $this->do_posts( $posts );

        die;
    }
    public function aac_print_posts( $cats = array() ) {

        //get_the_term_list( $post->ID, 'category', '<ul><li>', '</li><li>', '</li></ul>' )

        foreach( $cats as $heading => $id ) {
            $args = array( 
                'cat'         => $id,
                'paged'       => 1, // Always the first page on load
                'numberposts' => $this->posts_per_page, 
                'author'      => $this->js['author']
            );
            $posts = get_posts( $args );

            printf( '<h2>%s</h2>', $heading );

            if( empty( $posts ) ) {
                printf( '<div><p class="nomore">%s</p></div>', __( 'No posts.' ) );
                continue;
            }

            printf( '<div id="aac-%d" class="aac-result">', $id );

            $this->do_posts( $posts );

            printf( '</div><div>' );
            printf( '<p class="alignright">Page: <span id="aac-%1$d-ap">1</span></p><p class="alignleft"><a class="aacnav aacprev" href="#aac-%1$d">%2$s</a> <a class="aacnav aacnext" href="#aac-%1$d">%3$s</a></p>', $id, __('Previous'), __('Next') );
            printf( '<br class="clear" /></div>' );
        }
        ?>

        <h2>Answers</h2>

        <?php
        $args = array(
            'user_id' => $this->js['author'],
            'number'  => $this->comments_per_page,
            'status'  => 'approve',
            'type'    => 'comment'
        );
        $answers_list = get_comments( $args );
        if( empty( $answers_list ) ){
            printf( '<p>%s</p>', __( 'No answers by this user' ) );
            return;
        }
        $_comment_walk = new Walker_Comment;

        printf( '<div id="aac-comments"><ul>' );

        $_comment_walk->paged_walk( $answers_list, 0, 1, $this->comments_per_page, array( 
            'style' => 'ul', 
            'avatar_size' => 15, 
            'max_depth' => 1, 
            'callback' => array( $this, 'author_comment_walker' ) 
        ) );

        printf( '</ul></div><div><p class="alignright">Page: <span id="aac-comments-ap">1</span></p><p class="alignleft"><a class="aacnavc" href="#prev">%s</a> <a class="aacnavc" href="#next">%s</a></p><br class="clear" /></div>', __('Prev'), __('Next') );
    }
    private function do_posts( $posts, $term_id = 0 ) {

        echo '<ul>';
        foreach( $posts as $post )
            printf( '<li><a href="%s">%s</a></li>', get_permalink( $post->ID ), get_the_title( $post->ID ) );
        echo '</ul>';

    }
    public function author_comment_walker( $comment, $args, $depth ) {

        $GLOBALS['comment'] = $comment; 
        ?>

        <li>
            <div id="comment-<?php comment_ID(); ?>">
                <div>
                    <?php echo get_avatar( $comment, $args['avatar_size'], $default = '<path_to_url>' ); ?> <?php echo get_comment_author_link(); ?> answered 
                    <a href="<?php echo get_permalink( $comment->comment_post_ID ); ?>"><?php echo get_the_title( $comment->comment_post_ID ); ?></a> on <a href="<?php echo htmlspecialchars( get_comment_link( $comment->comment_ID ) ) ?>"><?php printf( __( '%1$s at %2$s' ), get_comment_date(),  get_comment_time() ); ?></a>
                    <?php //edit_comment_link( __( '(Edit)' ),'  ','' ); ?>
                </div>
                <?php // comment_text() ?>
                <p><?php comment_excerpt(); ?></p>
            </div>
        <?php
    }
}
$aac = new Author_Ajax_Cats;

4) del fuoco di un autore e vedere come i risultati sembrano e per controllarne le mie opere di codice per voi.

Come appare a livello locale con i dati di test.

Clicca per visualizzare la versione più grande, ridotto per la risposta

demo live del codice in azione: ** (sito di prova)

http://t31os.onatha.com/author/t31os/

5) Fornire un feedback ..:)

Mi auguro che aiuta ...

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a wordpress.stackexchange
scroll top