web-dev-qa-db-de.com

'is' Funktionen und 'get_query_var' funktionieren nicht

Warum funktionieren is-Funktionen in einer Ajax-Funktion nicht? Außer is_user_logged_in?

Ich habe auch versucht, get_query_var zu verwenden und es hat nicht funktioniert.

jQuery:

jQuery('.post-modal').live('click', function(e) {       

    e.preventDefault();

    var post_id = jQuery(this).data('post-id');

    jQuery.ajax({
        type: 'POST',
        url: mysite.ajax_url,
        data: {
            'action' : 'post_modal_content',
            'post_id' : post_id             
        },                      
        success: function(response) {
            var json = jQuery.parseJSON(response);
            jQuery('#post-modal .content').html(json.html);             
        }                                   
    });     
});

PHP:

function post_modal_content() {

    $post_id = $_POST['post_id'];   

    if (is_author()) {
        set_query_var('post_id', $post_id);
        ob_start();
        get_template_part('content-post-modal');
        $html = ob_get_contents();
        ob_end_clean();  

        $response = array('html' => $html);
        echo json_encode( $response );
        exit;
    }   
}
add_action( 'wp_ajax_post_modal_content', 'post_modal_content' );
add_action( 'wp_ajax_nopriv_post_modal_content', 'post_modal_content' );

Wenn ich mich auf der Autorenseite befinde, funktioniert es nicht, aber wenn ich die Prüfung durchführe, funktioniert alles einwandfrei.

1
Alex

Sie senden Ihre AJAX Anfrage an /wp-admin/admin-ajax.php (was sehr gut ist), daher handelt es sich nicht um eine typische WP Anfrage.

Während einer solchen Anforderung wird die Anforderung nicht analysiert, es wird keine globale WP_Query erstellt usw.

is_author ist ein Bedingtes Tag , das prüft, ob eine Autorenarchivseite angezeigt wird. Aus diesem Grund wird bei einer AJAX -Anforderung standardmäßig false zurückgegeben, da die AJAX -Anforderung die Autorenarchivseite nicht anzeigt.

Auf der anderen Seite funktioniert is_user_logged_in(), da der Benutzer noch während der Anforderung AJAX angemeldet ist (es ist dieselbe Sitzung).

PS. Das gleiche gilt für get_query_var - es wird keine Abfrage analysiert oder ausgeführt, daher sind keine Abfragevariablen verfügbar ...

2