web-dev-qa-db-fra.com

Comment obtenir user_id depuis la base de données wordpress dans la fonction ajax?

J'ai une fonction ajax qui fait basculer le type d'affichage des publications de l'utilisateur du mode liste au mode grille via ajax, mais le problème est que, lorsque la requête wp est appelée, elle ne peut pas obtenir l'identifiant du profil de l'utilisateur en cours de visualisation. Cela fonctionne lorsque je saisis manuellement un numéro d'identification, mais pas quand j'essaie d'utiliser des éléments tels que $ user-> ID ou $ user_id ou $ user ['ID']. Quelqu'un peut-il s'il vous plaît m'aider à comprendre cela?

Voici ma fonction php actuelle et elle est écrite dans mon fichier functions.php:

function profile_view(){

$args = array(
        'post_type' => 'listings',
        'post_status'    => 'publish',
        'meta_query' => array(
            array(
                'key' => 'stm_car_user',
                'value' => $user->ID
            )
        )
    );

$query = new WP_Query($args);
//$query = stm_user_listings_query('1', 'publish');

$response = array();

//Grid/list settings
$view_list = '';
$view_grid = '';
$view_map = '';
$current_link_args = array();
if(!empty($_GET)){
    $current_link_args = $_GET;
}

$view_list_link = $view_grid_link = $view_map_link = $current_link_args;
$view_list_link['view_type'] = 'list';
$view_grid_link['view_type'] = 'grid';
$view_map_link['view_type'] = 'map';


if(!empty($_GET['view_type'])) {
    if ( $_GET['view_type'] == 'list' ) {
        $view_list = 'active';
    } elseif ( $_GET['view_type'] == 'grid' ) {
        $view_grid = 'active';
        $current_link_args['view_type'] = 'grid';
    }
    elseif ( $_GET['view_type'] == 'map' ) {
        $view_map = 'active';
        $current_link_args['view_type'] = 'map';
    }
} else {
    $view_list = 'active';
}


    if ( $query->have_posts() ):
    ob_start();

    $template = 'partials/listing-cars/listing-list-directory-loop';
    if(!empty($_GET['view_type']) and $_GET['view_type'] == 'grid') {

    $template = 'partials/listing-cars/listing-grid-directory-loop';

    } elseif(!empty($_GET['view_type']) and $_GET['view_type'] == 'map') {

    $template = 'partials/listing-cars/listing-map';

    } else {

    $template = 'partials/listing-cars/listing-list-directory-loop';

    }


    while ( $query->have_posts() ) {
        $query->the_post();

        get_template_part($template);

    }

    $response['html'] = ob_get_contents();
    ob_end_clean();
else:

endif;
wp_reset_postdata();

$show_pagination = true;
if(!empty($query->found_posts) and !empty($query->query_vars['posts_per_page'])) {
    if($query->found_posts < $query->query_vars['posts_per_page']) {
        $show_pagination = false;
    }
}

$response = json_encode( $response );

echo $response;
exit;
}

 add_action('wp_ajax_profile_view' , 'profile_view');
 add_action('wp_ajax_nopriv_profile_view','profile_view');

Je ne cherche pas non plus à utiliser wp_get_current_user (), car il ne montre que les messages des utilisateurs actuellement connectés. Je souhaite pouvoir afficher tous les messages d'un utilisateur donné lorsque je consulte son profil, même lorsque je ne suis pas connecté. ...

Voici la fonction ajax:

$('.stm-view-by-profile a:not(.view-map)').on('click', function(e){
        e.preventDefault();
        var viewType = $(this).data('view');
        $('#stm_view_type_profile').val(viewType);
        $('.stm-view-by-profile a').removeClass('active');
        $(this).addClass('active');

        var data_form = $('.user_posts').serialize();

        $.ajax({
            url: ajaxurl,
            dataType: 'json',
            context: this,
            data: data_form + '&action=profile_view',
            beforeSend: function(){
                $('.stm-ajax-row').addClass('stm-loading');
            },
            success: function (data) {
            console.log(data);
           $('.stm-isotope-sorting').html(data.html);
           $('.stm-ajax-row').removeClass('stm-loading');
            }
        });
    });
1
Matt H

EDIT: Vous devez obtenir la variable de AJAX dans le cas où vous devez faire:

function profile_view() {
$user_id = $_GET["user_id"]; // name of hidden input

$args = array(
        'post_type' => 'listings',
        'post_status'    => 'publish',
        'meta_query' => array(
            array(
                'key' => 'stm_car_user',
                'value' => $user_id
            )
        )
    );
...
1
IvanMunoz