Warum hat derselbe Code bei der Verwendung von query_posts in functions.php und index.php andere Ergebnisse erhalten?

Ich verwende WordPress 3.5 und meine Blog-Sites haben viele registrierte Benutzer. Nachdem sie sich eingeloggt haben, möchte ich, dass sie nur ihre eigenen Beiträge sehen, nicht andere.

Also habe ich das zu meiner functions.php hinzugefügt, aber ich bekomme eine leere Seite.

 function only_login_user_post_on_homepage() { $current_user = wp_get_current_user(); query_posts('author=', $current_user -> ID); } add_action( 'pre_get_posts', 'only_login_user_post_on_homepage' ); 

Also, ich kommentiere die add_action , dann gehe zu index.php , füge denselben Code hinzu:

 $current_user = wp_get_current_user(); query_posts("author=".$current_user -> ID); 

Ja, habe die Ergebnisse, ich weiß nicht warum? Der Code ist derselbe, aber warum habe ich ein anderes Ergebnis bekommen.

Solutions Collecting From Web of "Warum hat derselbe Code bei der Verwendung von query_posts in functions.php und index.php andere Ergebnisse erhalten?"

In Ihrem ersten Codebeispiel pre_get_posts Aktion pre_get_posts , die während der Hauptabfrage pre_get_posts . Aber anstatt diese Abfrage zu manipulieren , triggern Sie eine andere mit query_posts() , die den Hook erneut query_posts() und Sie erhalten eine Endlosschleife.

Mit dem zweiten Codebeispiel überschreiben Sie einfach die Hauptabfrage, nachdem sie aufgetreten ist. Aber während es funktioniert, haben Sie eine redundante, zeitraubende Abfrage beendet.

Du bist fast da und unterstützt deine Bemühungen, also lass es uns zusammen bringen:

 function wpse_103997_only_posts_by_current_user( $wp_query ) { if ( is_user_logged_in() && $wp_query->is_main_query() && $wp_query->is_home() ) $wp_query->set( 'author', get_current_user_id() ); } add_action( 'pre_get_posts', 'wpse_103997_only_posts_by_current_user' );