Paginare într-un mini-loop din bara laterală

1 oct. 2010, 22:04:55
Vizualizări: 948
Voturi: 1

Am trecut la o altă temă și am decis să creez un widget din codul implicit pe care îl aveam, care afișează postările mele din Delicious, Twitter, StumbleUpon și YouTube într-un loop personalizat (excluzând aceste categorii din loop-ul principal).

Dar acum... paginarea nu mai funcționează.

Am creat acest widget:

// =============================== Widget EDL Sidebar Posts ======================================
class SidebarPosts extends WP_Widget {

function SidebarPosts() {
    parent::WP_Widget(false, $name = 'Postări în Bara Laterală'); 
}

/** @see WP_Widget::widget */
function widget($args, $instance) {  
    extract( $args );

    $title = apply_filters('widget_title', $instance['title']);
    echo $before_widget; if ( $title )
    echo $before_title . $title . $after_title; 
    $title = apply_filters('widget_title', $instance['title']);

    global $wp_query;

    $wp_query = new WP_Query();
    $wp_query->set('cat', '1172,14,867');
    $wp_query->set('posts_per_page', 30);
    $wp_query->set('offset', $paged*30);  
    $posts = $wp_query->get_posts(); 
    if ($posts) : 
        foreach ($posts as $post) : the_post();
            if (in_category(14)) { 
                echo $this->createSideBarLine($post, 'http://populair.eu/wp-content/themes/pop/bookmark_info/com/delicious/f.png', false, true, true);  
            } elseif (in_category(1172)) { 
                echo $this->createSideBarLine($post, '/wp-content/themes/edl/inc/banners/twitter.gif', false, true, true); 
            } elseif (in_category(867)) { 
                echo $this->createSideBarLine($post, 'http://populair.eu/wp-content/themes/pop/bookmark_info/com/stumbleupon/www/f.png', true, true, true);
            } 
        endforeach; 
        echo "<p>" . _e('Mai multe pe pagina următoare!') . "</p>";   
        wp_link_pages(array('next_or_number'=>'next', 'previouspagelink' => ' &laquo; ', 'nextpagelink'=>' &raquo;'));

    else: 
        echo "<p>" . _e('Accesează pagina principală pentru lista completă') . '</p>';
    endif; 

    echo $after_widget;
}

/** @see WP_Widget::update */
function update($new_instance, $old_instance) {    
    return $new_instance;
}

/** @see WP_Widget::form */
function form($instance) {  
$title = apply_filters('widget_title', $instance['title']);
    ?>
<p>
    <label for="<?php echo $this->get_field_id('title'); ?>"><?php _e('Titlu:'); ?> </label>
    <input class="widefat" id="<?php echo $this->get_field_id('title'); ?>" name="<?php echo $this->get_field_name('title'); ?>" type="text" value="<?php echo $title; ?>" />
</p>
<?php }

function get_the_content_with_formatting ($more_link_text = '(mai mult...)', $stripteaser = 0, $more_file = '') {
    $content = get_the_content($more_link_text, $stripteaser, $more_file);
    $content = apply_filters('the_content', $content);
    $content = str_replace(']]>', ']]&gt;', $content);
    return $content;
}

//
// Afișează o linie în widget-urile LifeFeed / IssueFeed / BrainFeed
// din bara laterală
//
function createSideBarLine($post,$strImage, $boolShowTitle, $boolShowExcerpt, $boolShowContent) {
    global $wp_query;

    $strBuffer="";
    $strTitle = strip_tags(get_the_title());
    $strPermalink = get_permalink($post->ID);
    $intId = $post->ID;
    $strContent = $this->get_the_content_with_formatting();
    $strContent = str_replace('<p>', '', $strContent);
    $strEditPostLink = get_edit_post_link();

    // dacă conținutul include "YouTube" atunci folosește iconița YouTube
    if (strstr($strContent, 'YouTube')) {
        $strImage = 'http://populair.eu/wp-content/themes/pop/bookmark_info/com/youtube/www/f.png';
    }

    $strBuffer.= '<div class="tb-link" id="post-'.  $intId . '">';
    $strBuffer.= '<p><a href="' . $strPermalink; 
    $strBuffer.= '" rel="nofollow bookmark" title="Legătură permanentă către ';
    $strBuffer.= $title . '">';
    $strBuffer.= '<img src="'. $strImage . '" align="left" ';
    $strBuffer.= 'width="12" style="border: 0px none;';
    $strBuffer.= 'margin: 0px 10px 0px 0px; display: inline;">';
    $strBuffer.= '</a>';
    if ($boolShowTitle) {
        $strBuffer.= '<a href="' . $strPermalink;
        $strBuffer.= '" rel="nofollow bookmark"'; 
        $strBuffer.= 'title="Legătură permanentă către ' . $strTitle . '">';
        $strBuffer.= $strTitle . "</a>";
    }
    if ($boolShowExcerpt) {
        $strBuffer.= $post->post_excerpt;
    }
    if ($boolShowContent) {
        $strBuffer.= $strContent;
    }  
    if (is_admin()) {
        $strBuffer.= '<a href="'. $strEditPostLink . '" class="editpost">';
        $strBuffer.= ' [editează]</a>';
    }  
    $strBuffer.= "</p></div>";   
    return $strBuffer;   
}
}

Cred că în tema anterioară putea prelua variabila $paged din loop-ul principal sau ceva de genul, acum nu mai afișează nicio paginare, așa că afișează întotdeauna doar primele 30 de elemente.

(vezi http://edward.de.leau.net/ pentru exemplu, sunt în proces de conversie la tema Swift)

0
Toate răspunsurile la întrebare 1
1

Încearcă să folosești global $paged înainte de a utiliza variabila în funcția widget.

1 oct. 2010 22:13:58
Comentarii

Doar voiam să adaug că, pentru a funcționa pe pagina principală, trebuie să scazi 1 din $paged când ești în mediul homepage. (spre deosebire de pagini). Încă nu am codat această funcționalitate pentru arhive.

edelwater edelwater
15 oct. 2010 15:07:00