Die zukünftige Single-Post-Abfrage von Ajax funktioniert nicht, wenn Sie NICHT angemeldet sind

Ich habe ein Problem mit einer Ajax-Anfrage für einen einzelnen Post, wenn der Benutzer nicht angemeldet ist. Der Post ist ein Kalenderdatum und liegt in der Zukunft. Die Abfrage funktioniert gut, wenn ich bei WordPress angemeldet bin, aber nicht, wenn ich ausgeloggt bin. Diese Art der Abfrage funktioniert auch, wenn kein Ajax beteiligt ist, beispielsweise wenn ich alle zukünftigen Daten auf einer Kategorieseite anzeigen möchte. Muss ich eine Instanz von wpdb starten, um die Ergebnisse zu erhalten? Muss eine Erlaubnis Sache aber kann keine Antworten finden.

function ajax_get_date_post() { // get the submitted parameters $post_id = $_POST['post_id']; $args = array( 'post_type' => 'mandy_dates', 'p' => $post_id, 'post_status' => 'future,publish' ); // build and make query $clicked_date = new WP_Query( $args ); // response output header( "Content-Type: application/html" ); if ( $clicked_date->have_posts() ) { while ( $clicked_date->have_posts() ) { $clicked_date->the_post(); include( $this->get_single_post_template_path() ); } } else { echo "Sorry, Date not found"; } exit; } 

AKTUALISIEREN:

Das sind die Haken:

  add_action( 'wp_ajax_nopriv_ajax_get_date_post', array(&$this, "ajax_get_date_post") ); add_action( 'wp_ajax_ajax_get_date_post', array(&$this, "ajax_get_date_post") ); 

Das ist der Ajax JS:

 function ajax_get_post( _id ) { $.post( mandy_dates_js_config.ajaxurl, { action : 'ajax_get_date_post', post_id : _id }, function( response ) { on_date_loaded( response ); } ); } 

UPDATE 2:

Ich habe es herausgefunden. habe die “show-future-posts-on-single-post” so geändert, dass sie in meiner ajax-Anfrage funktioniert, hier der aktualisierte Code

 function ajax_get_date_post() { // get the submitted parameters $post_id = $_POST['post_id']; $args = array( 'post_type' => 'mandy_dates', 'p' => $post_id // 'post_status' => 'future,publish' ); // build and make query $this->clicked_date = new WP_Query(); add_filter( 'the_posts', array( &$this,'show_future_posts') ); $this->clicked_date->query( $args ); remove_filter( 'the_posts', array(&$this,'show_future_posts') ); // response output header( "Content-Type: application/html" ); if ( $this->clicked_date->have_posts() ) { while ( $this->clicked_date->have_posts() ) { $this->clicked_date->the_post(); include( $this->get_single_post_template_path() ); } } else { echo "Sorry, Date not found"; } exit; } function show_future_posts( $posts ) { global $wpdb; if( $this->clicked_date->post_count == 0 ) { $posts = $wpdb->get_results($this->clicked_date->request); } return $posts; } 

Solutions Collecting From Web of "Die zukünftige Single-Post-Abfrage von Ajax funktioniert nicht, wenn Sie NICHT angemeldet sind"

normalerweise, weil Sie einen “add_action” -Aufruf für keine angemeldeten Benutzer verpassen.

füge das zu deinem plugin oder functions.php hinzu

 add_action('wp_ajax_nopriv_REPLACETHIS', 'ajax_get_date_post'); 

und ändern Sie den REPLACETHIS-Wert vom Ajax-Aufruf in Ihren Aktionswert.

Denken Sie daran, dass beim Aufruf von AJAX vom Front-End aus, dass keine angemeldeten Benutzer diese Anrufe tätigen dürfen, Sie immer beide hinzufügen:

  add_action('wp_ajax_my_action', 'my_action_callback'); add_action('wp_ajax_nopriv_my_action', 'my_action_callback'); 

Sie können mehr über den Codex lesen