it-swarm.com.de

WordPress Anzahl der Beiträge, die sich nicht mit posts_per_page ändern

Ich habe Tausende von Posts, die ich auf meiner Homepage anzeige. Ich möchte die Anzahl der Beiträge kontrollieren, daher verwende ich posts_per_page, aber es funktioniert nicht für mich. Alle anderen Argumente funktionieren, aber posts_per_page funktioniert nicht. Ich habe Paginierung auf dieser Seite und posts_per_page funktioniert für alle anderen Paginierungsseiten, jedoch nicht für die erste (Haupt-) Seite. Zu Testzwecken erstelle ich eine leere Vorlage, die nur eine einfache WordPress-Schleife und keine Paginierung oder etwas anderes enthält, das nur den Titel des Beitrags anzeigt. In dieser Vorlage ist die Anzahl der Beiträge wieder begrenzt, aber posts_per_page funktioniert auch nicht Seite. Ich habe versucht, alle Plugins zu deaktivieren, aber es gab keine Auswirkungen. Ich denke, dieses Problem betrifft Themen, bei denen der Wert für posts_per_page dynamisch festgelegt wird. Ich setze auch die Abfrage vor dieser Schleife mit wp_reset_query(); zurück und habe diesen Code auch in functions.php ausprobiert.

add_action( 'pre_get_posts',  'set_posts_per_page'  );
function set_posts_per_page( $query ) {
    global $wp_the_query;
    $query->set( 'posts_per_page', 12 );
    return $query;
}

Aber bei mir funktioniert nichts. Ich habe versucht, den Inhalt von Abfragen mit var_dump($query->request) anzuzeigen, und das Abfragelimit war 12, aber auf der Seite werden immer noch mehr als 100 Beiträge angezeigt. Auf der Seite mit den WordPress-Einstellungen auf der Seite mit den Designeinstellungen beträgt das Beitragslimit 12, aber im Frontend funktioniert dieses Limit nicht. Hier ist das Ergebnis dieser Abfrage.

string(489) "SELECT SQL_CALC_FOUND_ROWS wp_mdw75t47kk_posts.ID FROM wp_mdw75t47kk_posts INNER JOIN wp_mdw75t47kk_postmeta ON ( wp_mdw75t47kk_posts.ID = wp_mdw75t47kk_postmeta.post_id ) WHERE 1=1 AND ( wp_mdw75t47kk_postmeta.meta_key = '_imwb_zonpress_post_ctr' ) AND wp_mdw75t47kk_posts.post_type = 'post' AND (wp_mdw75t47kk_posts.post_status = 'publish' OR wp_mdw75t47kk_posts.post_status = 'private') GROUP BY wp_mdw75t47kk_posts.ID ORDER BY wp_mdw75t47kk_postmeta.meta_value+0 DESC LIMIT 0, 12" 

Ich teile auch die URL dieser Testseite, wenn jemand dies sehen möchte. Link zur Testseite Sie können dieses Problem auch auf der Hauptseite sehen. Für mich ist das ein sehr seltsames Problem, weil ich alles von Google ausprobiert habe, aber nichts, was für mich funktioniert.
Ich verwende ein verdecktes Store Builder-Thema. Jeder Vorschlag wird sehr geschätzt. Vielen Dank!

Hier ist der vollständige Code für diese Schleife.

wp_reset_query(); 
$args = Array(
        'posts_per_page' => 12
);

$query = new WP_Query( $args );

<?php while ( $query->have_posts() ) : $query->the_post(); ?> 

Dann gibt es einen Code zum Anzeigen von Bild, Titel und Auszug und ich denke, dies sollte die Anzahl der Beiträge nicht beeinflussen. Danach sind diese Zeilen gegeben

<?php 
endwhile; ?>

Aber wie ich schon erwähnte, habe ich diesen Code in einer leeren Vorlage ohne Paginierung ausprobiert, aber posts_per_page funktionierte immer noch nicht. Also denke ich, ein externer Haken, der diesen Wert einstellt. Ich habe versucht, dies in Themendateien herauszufinden, war aber nicht erfolgreich. Ich weiß, das liegt nur an diesem Thema.

3
Awan

Hast du das probiert?

<?php 
    $blogpost  =  new WP_Query(array(         
       'post_type'      => 'post',
       'posts_per_page' => 6
        ));
?>
<?php while($blogpost->have_posts()) : $blogpost->the_post(); ?>
// Writhe your Blog article Here.
<?php endwhile; ?>
1
Asrsagar

Haben Sie versucht, vor den Hauptargumenten und der Schleife Folgendes hinzuzufügen?

<!-- Modify pagination function for front page -->
<?php
global $paged, $wp_query, $wp;
$args = wp_parse_args($wp->matched_query);
if ( !empty ( $args['paged'] ) && 0 == $paged ) {
$wp_query->set('paged', $args['paged']);
$paged = $args['paged']; } ?>

Fügen Sie dann die Paginierung folgendermaßen hinzu:

<?php
$args = array(
'posts_per_page' => 12,
'paged' => $paged ); ?>

$query = new WP_Query($args);

<?php if ($query->have_posts()) : $i = 1; ?>

<?php while ( $query->have_posts() ) : $query->the_post(); ?>

// Content Here

<?php $i++; endwhile; ?>
<?php else : ?>
<h2>Content not found!</h2>
<?php endif; ?>

//pagination code

In meinem Fall verwende ich WP pagenavi, also würde ich verwenden:

<?php wp_pagenavi( array( 'query' => $query )); ?>
<?php wp_reset_query(); ?>
0
Rocketlaunch

Hast du das probiert?

function posts_on_homepage( $query ) {
    if ( $query->is_home() && $query->is_main_query() ) {
        $query->set( 'posts_per_page', 10 );
    }
}
add_action( 'pre_get_posts', 'posts_on_homepage' );
0
mad2kx

Versuchen Sie, dies vor dem Abfrageargument einzufügen.

    if (get_query_var('paged')) {
        $paged = get_query_var('paged');
    } elseif (get_query_var('page')) {
        $paged = get_query_var('page');
    } else {
        $paged = 1;
    }

Bei dem Argument mache 'paged' => $paged

0
Dunder

Ich vermute, dass Ihr Thema an einen Filter gebunden ist, der die Abfrage auch in Ihrer Schleife zurücksetzt, was zu einer unendlichen Rekursion führt. In diesem Fall haben Sie drei Möglichkeiten:

Sie können das Thema verwerfen und ein anderes verwenden. Das ist wahrscheinlich eine schlechte Antwort, wenn Sie stark investiert sind.

Sie können das Thema hacken, was ebenfalls eine schlechte Antwort ist, da Sie es bei einem Update erneut ausführen müssen, oder Sie müssen einen Teil des Kerncodes in einem untergeordneten Thema überschreiben, was sehr chaotisch werden kann.

Oder Sie können es auf schnelle und schmutzige Weise tun, indem Sie einfach eine gute alte for-Schleife anstelle von while verwenden.

wp_reset_query();
$GLOBALS['my_counter'] = 12;
$args = Array(
    'posts_per_page' => $GLOBALS['my_counter'];
);

$query = new WP_Query( $args );

<?php
for ( $i = 0; $i < $GLOBALS['my_counter'], $i++ )
{
    if (!$query->the_post())
    {
        break;
    }
}
unset($GLOBALS['my_counter']);
?>

Es ist hässlich, aber es sollte tun, was Sie wollen. Die for -Schleife wird nur 12 Mal ausgeführt, unabhängig davon, ob die Abfrage durch etwas anderes zurückgesetzt wird oder nicht. Wenn du doppelte Beiträge siehst, kannst du auch einen Haltepunkt in die Schleife setzen und mit debug_backtrace(1) herausfinden, wo es passiert, was in einer while-Schleife nicht wirklich machbar ist, es sei denn, du magst die Idee von ungefähr 8 Milliarden Seiten Debug-Code und möglicherweise Ihren Server zum Absturz bringen.


Wenn dies bei Ihnen funktioniert, können Sie aus mehreren Gründen eine elegantere Lösung finden:

A) Globals sind schlecht.

B) Dinge falsch zu machen, führt normalerweise dazu, Dinge falsch zu machen. Ich kann nicht sagen, was der richtige Weg für Ihr spezielles Thema ist, aber wenn es eine Möglichkeit bietet, das zu tun, was Sie auf Ihrer Homepage wollen, sollten Sie dies tun. Wenn es jedoch keine APIs gibt, tun Sie, was Sie müssen.

0
mopsyd