Ist es möglich, Abfrageparameter auf der Archivseite hinzuzufügen?

Ich habe einen benutzerdefinierten Beitragstyp (funktioniert) und eine Archivseite (archive-works.php). Ich möchte die nicht-öffentlichen Beiträge von der Archivseite ausblenden, also habe ich eine benutzerdefinierte Metabox hinzugefügt.

Ich änderte auch die Abfrage, um nur die Beiträge aufzulisten, wenn die public_s 0 ist:

$args = array( 'meta_key' => 'public_s', 'meta_value' => '0', 'meta_compare' => '!=' ); $queryWorks = new WP_Query( $args ); if ( $queryWorks->have_posts() ) : while ( $queryWorks->have_posts() ) : $queryWorks->the_post(); 

Aus einigen Gründen funktioniert die Abfrage nicht.

 var_dump($queryWorks->the_post()); -> NULL 

Was ist das Problem mit der Abfrage?

Solutions Collecting From Web of "Ist es möglich, Abfrageparameter auf der Archivseite hinzuzufügen?"

Wie @s_ha_dum bereits darauf hingewiesen hat, können Sie die Statusfunktion zum Erstellen von privaten Posts verwenden, wenn Sie Posts veröffentlichen. Dadurch werden diese Beiträge von allen abgemeldeten Benutzern ausgeblendet.

Da Sie die Route für benutzerdefinierte Felder bereits durchsucht haben, können Sie die folgenden Änderungen an Ihrem benutzerdefinierten Post-Typ-Archiv vornehmen

  • Entfernen Sie Ihre benutzerdefinierte Abfrage. Dies führt zu Seitenfunktionen und Paginierung. Ich habe vor einiger Zeit eine Antwort darüber geschrieben, wo benutzerdefinierte Abfragen verwendet werden und wo nicht

  • Verwenden Sie pre_get_posts wie in meinem verlinkten Post beschrieben, um die Hauptabfrage entsprechend zu ändern. Dies wird alle Ihre Probleme lösen.

HINWEIS: Standardmäßig ist der post_type der von WP_Query wird, post . Sie haben wahrscheinlich keine Standard-Posts, die zu Ihrer Anfrage passen, deshalb erhalten Sie keine Posts

Sie müssen so etwas in der Datei functions.php tun, nachdem Sie auf der Post-Archivseite in die Standardschleife zurückgekehrt sind: ( CAVEAT: Nur Beispielcode, nach Bedarf anpassen. Benötigt PHP 5.3+ )

 add_action( 'pre_get_posts', function ( $q ) { if ( !is_admin() // VERY important, targets only front end queries && $q->is_main_query() // VERY important, targets only main query && $q->is_post_type_archive( 'YOUR_POST_TYPE_NAME' ) // Which post type archive page to target ) { $q->set( 'meta_key', 'META_KEY_NAME' ); $q->set( 'meta_value', 'META_VALUE_VALUE'); // Rest of your arguments to set } });