it-swarm.com.de

Seitennavigation wird bei Abfragekategorie nicht angezeigt

Problem:
Wenn ich www.example.com?cat=4 oder Kategorie über das benutzerdefinierte Menü oder über das Kategorie-Widget auswähle, wird nur die erste Seite ohne Navigation unten angezeigt, wo sie sich befinden soll. Das gleiche gilt, wenn ich index.php oder category-slug.php als Vorlage verwende. Zum Testen, wenn ich www.example.com?year=2012 mache, funktioniert es. Auch www.example.com?cat=4&paged=2 funktioniert. Es muss also etwas mit Kategorien sein.

Mein Setup:Wordpress 3.5, Free WP Tube Theme, SQLite

Relevanter Code:index.php

<?php get_header(); ?>

    <!-- code to get theme options and setup $orderby -->                               
                            query_posts($query_string.$orderby.'&cat=4'); //in this case showing category with navigation works
                            if (have_posts()) : ?>
                            <?php $i=0; while (have_posts()) : the_post(); $i++; ?>

                <!-- code for displaying posts -->          

                            <?php if($i%3==0) : ?><div class="clear"></div><?php endif; ?>

                            <?php endwhile; wp_reset_query(); ?>
                            <?php 
                            $next_page = get_next_posts_link('Previous'); 
                            $prev_pages = get_previous_posts_link('Next');
                            if(!empty($next_page) || !empty($prev_pages)) :
                            ?>
                            <!-- navigation -->
                            <div class="navigation">
                                <?php if(!function_exists('wp_pagenavi')) : ?>
                                <div class="alignleft"><?php echo $next_page; ?></div>
                                <div class="alignright"><?php echo $prev_pages; ?></div>
                                <?php else : wp_pagenavi(); endif; ?>
                            </div>
                            <!-- /navigation -->
                            <?php endif; ?>

Hinweis: In der Abfrage wird angezeigt, dass ich den &cat=4 verwende. Es ist dasselbe wie category_name=video, da ich nur Videos auf der Homepage anzeigen möchte. Ich möchte aber auch in der Lage sein, diese Kategorie aus dem benutzerdefinierten Menü auszuwählen. In diesem Fall wird die Seitennavigation nicht angezeigt.

Was ich versucht habe:

Erstellen Sie $wp_query = null und stellen Sie dann vor der Schleife eine neue Abfrage. http://wordpress.org/support/topic/next-page-navigation-doesnt-work . Grundsätzlich jede Variation davon

<?php
$myqueryname = $wp_query;
$wp_query = null;
$wp_query = new WP_Query();
$wp_query->query('showposts=5'.'&paged='.$paged);
?>

Funktioniert nicht.

Hinzufügen von $ paged, wie vom Ersteller von WP-pagenavi und Foren vorgeschlagen:

<?php $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; ?>
                                  <?php query_posts("cat=-11&paged='.$paged);; ?>

Funktioniert nicht.

Tests:Neben den einfachen im "Problem" -Teil der Frage habe ich print_r($wp_query) getan, um zu sehen, wo das Problem anfängt und es beginnt gleich am Anfang, d. H. wenn ich print_r($wp_query) als erste zeile in header.php setze. Das Problem liegt also nicht in der benutzerdefinierten Abfrage des Themas. Stimmt das? Ich habe es für die funktionierende $ wp_query gemacht und $ wp_query nicht, dann habe ich sie verglichen. Dies ist der relevante Vergleichsteil des Codes: Working $ wp_query:

[category_name] =>
[cat] => 4
...
**//most important part**
[found_posts] => 382    
[max_num_pages] => 43
...
[request] => SELECT SQL_CALC_FOUND_ROWS  wp_posts.ID FROM wp_posts  WHERE 1=1  AND wp_posts.post_type = 'post' AND (wp_posts.post_status = 'publish' OR wp_posts.post_status = 'private')  ORDER BY wp_posts.post_date DESC LIMIT 0, 9
...
//here shows code for some posts even if not displaying them, because they're not in the cat=4 or category_name=video 

$ wp_query funktioniert nicht:

[category_name] => video
[cat] => 4
...
**//most important part**
[found_posts] => 1
[max_num_pages] => 1
...
[tax_query] => WP_Tax_Query Object
        (
            [queries] => Array
                (
                    [0] => Array
                        (
                            [taxonomy] => category
                            [terms] => Array
                                (
                                    [0] => video
                                )

                            [include_children] => 1
                            [field] => slug
                            [operator] => IN
                        )

                )

            [relation] => AND
        )
...
[query] => Array
        (
            [category_name] => video
        )

    [request] => SELECT SQL_CALC_FOUND_ROWS  wp_posts.ID FROM wp_posts  INNER JOIN wp_term_relationships ON (wp_posts.ID = wp_term_relationships.object_id) WHERE 1=1  AND ( wp_term_relationships.term_taxonomy_id IN (4) ) AND wp_posts.post_type = 'post' AND (wp_posts.post_status = 'publish' OR wp_posts.post_status = 'private') GROUP BY wp_posts.ID ORDER BY wp_posts.post_date DESC LIMIT 0, 9
...
//this $wp_query doesn't show code for the posts which are not from video category
...
[queried_object] => objArray Object
        (
            [term_id] => 4
            [name] => Video
            [slug] => video
            [term_group] => 0
            [term_taxonomy_id] => 4
            [taxonomy] => category
            [description] => 
            [parent] => 0
            [count] => 379
            [cat_ID] => 4
            [category_count] => 379
            [category_description] => 
            [cat_name] => Video
            [category_nicename] => video
            [category_parent] => 0
        )

Edit # 1:Dies ist der Vergleich VOR der benutzerdefinierten Abfrage! Als ich $ wp_query in die Schleife geschrieben habe, sind sie nach der benutzerdefinierten Funktion query_posts() identisch. Das Problem liegt also nicht in der $ wp_query. Aus dem index.php-Code gibt get_next_posts_link('Previous') außerdem NULL zurück, wenn Sie das Kategorie-Formular-Menü oder den ?category_name=video auswählen.

Fazit:Es passiert etwas vor den Vorlagendateien mit der Standardabfrage, aber ich weiß nicht was. Kann mir jemand helfen, die Seitennavigation anzuzeigen?

Edit # 2:Da die get_next_posts_link('Previous') NULL zurückgibt, wusste ich, dass es etwas mit dem $wp_query->max_num_pages; zu tun hat. Diese Zahl muss größer als 1 sein, um die Navigation anzuzeigen. Also habe ich getestet, indem ich Code <pre><?php echo $wp_query->max_num_pages; ?></pre> eingegeben habe, um zu sehen, wann er von 1 nach> 1 wechselt. Ich habe festgestellt, dass es sich in der Arbeitsversion nach der <?php endwhile; wp_reset_query(); ?> ändert und in der Nicht-Arbeitsversion nicht.

2
cikatomo

Ich habe eine teilweise Problemumgehung gefunden. Da das Abfrageobjekt in der index.php das richtige ist, habe ich es mit serialize auf ein Template Ihrer Wahl übertragen, in diesem Fall category-video.php.

In index.php habe ich oben gesetzt

<?php $s = serialize($wp_query);
file_put_contents('query',$s); ?>

und in category-video.php habe ich gesetzt

<?php $u = file_get_contents('query');
$wp_the_query = unserialize($u); ?>

Es ist nicht die Lösung, aber es ist eine Umgehung und die Seitennavigation wird angezeigt und funktioniert teilweise jetzt. Zahlen in der Navigation zeigen die aktuelle Seite nicht korrekt an, aber die vorherigen und nächsten Seiten funktionieren ebenso wie das Klicken auf die Seitenzahl. Es ist Wp-PageNavi-Plugin.

Bearbeiten: Ich habe auch Seitenzahlen festgelegt. Aus irgendeinem Grund, nachdem die wp_reset_query()$wp_query->get('paged') falsche Nummer zurückgegeben hat, frag mich nicht warum, ich weiß es nicht. Also habe ich $ paged from before genommen und nach der wp_reset_query eine neue query var gesetzt.

query_posts($query_string.$orderby);                        
$my_page = $wp_query->get('paged') 

/*code for looping the posts*/

wp_reset_query();
set_query_var('paged',$my_page);

Nun zeigen die WP-Seiten die korrekten Seitenzahlen.

BEARBEITEN: Das Problem liegt im PDO-Plugin und Sqlite, ich habe es getestet.

0
cikatomo