Escape aktuelle Post aus der Schleife

Ich erstelle ein Such-Widget und dafür verwende ich eine sekundäre Schleife über neue WP_Query ();

$query = new WP_Query('s=searchTerm'); if ($query->have_posts()){ while ($query->have_posts()){ $query->the_post(); //echo the post } wp_reset_postdata(); } else { echo 'No results'; die(); } 

Das Problem besteht darin, dass die Suchanfrage die Posts mit dem Suchbegriff in ihrem Titel oder Inhalt und dem aktuellen Post / der angezeigten Seite zurückgibt. Wie kann ich das vermeiden?

Solutions Collecting From Web of "Escape aktuelle Post aus der Schleife"

Der Titel der Frage ist ungenau. Ich denke du willst dem ersten Beitrag nicht entkommen, stattdessen willst du den aktuellen Beitrag ausschließen. Sie können das Argument WP_Query in WP_Query .

 $args = array( 's' => 'searchTerm' ); //Check if we are in a post of any type if( is_singular() ) { $post = get_queried_object(); $args['post__not_in'] = array( $post->ID ) } $query = new WP_Query( $args ); if ($query->have_posts()){ while ($query->have_posts()){ $query->the_post(); //echo the post } wp_reset_postdata(); } 

AKTUALISIEREN

Da Sie den Code in der Ajax-Anfrage verwenden, haben Sie keinen Zugriff auf die aktuellen Post-Daten im Ajax-Aktions-Hook. Sie müssen die aktuelle Post-ID in den Ajax-Anforderungsdaten übergeben.

Zum Beispiel (nicht getestet. Einfach hier schreiben):

 //Enqueue the scripts and localize js variables add_action('wp_enqueue_scripts', 'cyb_scripts'); function cyb_scripts() { //register my-script wp_register_script( 'my-script', '/url/to/my-sript.js', array('jquery') ); //enqueue my-sript and dependencies wp_enqueue_script('jquery'); wp_enqueue_script('my-script'); //Localize script data to use in my-script. Set here the post ID to exlude $exclude_post = 0; if( is_singurlar() ) { $current_post = get_queried_object(); $exclude_post = $current_post->ID; } $scriptData = array( 'ajaxurl' => admin_url('admin-ajax.php'); 'exclude_post' => $exclude_post ); wp_localize_script('my-script', 'my_script_data', $scriptData); } //Ajax action hooks add_action('wp_ajax_nopriv_process_ajax', 'cyb_process_ajax'); add_action('wp_ajax_process_ajax', 'cyb_process_ajax'); function cyb_process_ajax(){ $args = array( 's' => 'searchTerm' ); //Check for post to exlude if( isset($_GET['exclude_post']) ) { $args['post__not_in'] = array( intval( $_GET['exclude_post'] ) ); } $query = new WP_Query( $args ); //.... wp_reset_postdata(); } 

Das Javascript:

 jQuery(document).ready(function($){ $.ajax({ type: "GET", url: my_script_data.ajaxurl, data: { action: "process_ajax", exclude_post: my_script_data.exclude_post } }) .done( function( response ) { //.... }) .fail( function( response ){ //.... }); }); 

Versuchen Sie, den Parameter offset in die Argumente einzufügen.

 $query = new WP_Query( array( 'offset' => 1, 's' => 'searchTerm') ); if ($query->have_posts()){ while ($query->have_posts()){ $query->the_post(); //echo the post } wp_reset_postdata(); } else { echo 'No results'; die(); }