WordPress-Schleife verwendet unmodifizierte Posts Array, warum?

Ich habe diesen Code in einer WordPress-Vorlage:

$prepost = $post; $normal_args = array( // here goes the args ); $normal_query = new WP_Query( $normal_args ); echo 'BEFORE: ' . count($normal_query->posts); wpse_210493_apply_advertising_position( $normal_query->posts ); echo 'AFTER: ' . count($normal_query->posts); if ( $normal_query->have_posts() ) { while ( $normal_query->have_posts() ) { $normal_query->the_post(); // do something here } } 

Die Ausgabe für echo ist:

 BEFORE: 25 AFTER: 23 

Das ist richtig, denn in der function wpse_210493_apply_advertising_position() entferne ich diese beiden, aber das Problem ist, dass $normal_query->have_posts() die ursprünglichen $normal_query->posts und nicht die von der function modifizierten und die am Ende zwei leere Werte verursachen des Arrays, das dieses hässliche Ergebnis verursacht:

Bildbeschreibung hier eingeben

Dies ist die function wpse_210493_apply_advertising_position() :

 function wpse_210493_apply_advertising_position( &$posts, $return = false ) { $ad_posts = array(); $content_posts = array(); // Seperate $posts into "Ads" and "Content" arrays based on whether or not they have 'rw_adversiting_position' meta-data foreach ( $posts as $post ) { $position = intval( get_post_meta( $post->ID, 'rw_adversiting_position', true ) ); $post_date = $post->post_date; $post_modified = $post->post_modified; if ( ! empty( $position ) ) { if( isset( $ad_posts[ $position ] ) ) { if ( $post_date > $ad_posts[ $position ]->post_date || $post_modified > $ad_posts[ $position ]->post_modified ) { $ad_posts[ $position ] = $post; } } else { $ad_posts[ $position ] = $post; } } else { $content_posts[] = $post; } } // Sort the ads from smallest position index to greatest such that re-insertion properly factors in all ads ksort( $ad_posts ); // Add the ads back into the content at their specified positions foreach ( $ad_posts as $position => $ad ) { array_splice( $content_posts, $position, 0, array( $ad ) ); } // If $return is true, return the resulting array. Otherwise replace the original $posts array with it. if ( $return ) { return $content_posts; } else { $posts = $content_posts; } } 

Kann mir jemand dazu einen Rat geben? Ich werde verrückt und finde keinen Weg, das zu beheben

Solutions Collecting From Web of "WordPress-Schleife verwendet unmodifizierte Posts Array, warum?"