web-dev-qa-db-fra.com

'is' fonctions et 'get_query_var' ne veut pas dire

Pourquoi les fonctions is ne fonctionnent-elles pas dans une fonction Ajax? Sauf pour is_user_logged_in?

J'ai aussi essayé d'utiliser get_query_var et cela n'a pas fonctionné.

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' );

Si je suis sur la page de l'auteur, cela ne fonctionne pas, mais si je prends le chèque, tout se passe bien.

1
Alex

Vous envoyez votre demande AJAX à /wp-admin/admin-ajax.php (ce qui est très bon), ce n'est donc pas une demande typique WP.

Pendant cette requête, la requête n'est pas analysée, aucun WP_Query global n'est créé, etc.

is_author est une balise conditionnelle , qui vérifie si une page d'archive d'auteur est affichée. Donc, de par sa conception, il retournera false lors de la demande AJAX, car la demande AJAX n'affiche pas la page d'archive de l'auteur ...

Par contre, is_user_logged_in() fonctionne, car l'utilisateur est toujours connecté pendant la demande AJAX (c'est la même session).

PS C'est la même chose avec get_query_var - aucune requête n'est analysée ni exécutée, donc aucune variable de requête n'est disponible ...

2
Krzysiek Dróżdż