Wordpress - Список пользователей с Ajax

Я использую плагин "Users Follow System". До сих пор я добавлял список следующих/подписчиков в профиль author.php, теперь я пытаюсь использовать Ajax с этим, но проблема, с которой я столкнулся, заключается в том, что мне нужно получить одну и ту же метаданную пользователя для каждого пользователя по идентификатору, так что все могут видеть следующих пользователей друг друга.

В author.php я использовал эту строку для получения информации о пользователях.

<?php
    $curauth = (isset($_GET['author_name'])) ? get_user_by('slug', $author_name) : get_userdata(intval($author));
?>

И эта строка, чтобы получить метаданные пользователя _pwuf_following

$include = get_user_meta($curauth->ID, '_pwuf_following', true);

Но когда я добавил те же строки в обработчик функции Ajax, он не работал.

я пытался get_queried_object(); wp_get_current_user(); get_userdata();
но всегда терпел неудачу.

Вот фрагмент из author.php, чтобы получить список следующих пользователей.

<?php

$curauth = (isset($_GET['author_name'])) ? get_user_by('slug', $author_name) : get_userdata(intval($author));

$include = get_user_meta($curauth->ID, '_pwuf_following', true);

if ( empty( $include ) ) {

     echo 'Not followed anyone yet.';

    } else {

$args = array (
    'order' => 'DESC',
    'include'  => $include,
    'number'  => 52,
    'paged' => 1
);

$wp_user_query = new WP_User_Query( $args );

$users = $wp_user_query->get_results();

    echo '<div id="top-artists-contributors-3">';
    echo '<ul id="grid-contributors-4">';
    echo '<li class="scroll-artists">';
    foreach ( $users as $user ) {
        $avatar_size = 90;
        $avatar = get_avatar($user->user_email, 200);
        $author_profile_url = get_author_posts_url($user->ID);
        $profile = get_userdata($user->ID);

    echo '<div class="single-item-3">';
    echo '<div class="author-gravatar-3"><a href="', $author_profile_url, '">', $avatar , '</a></div>';
    echo '<div class="members-name"><a href="', $author_profile_url, '">' . $profile->first_name .'</a></div>';
    echo '</div>';           
    }
    echo '</li>';
    echo '</ul>';
    echo '</div>';
}
?>

Это js для получения URL-адреса и действия Ajax.

<script type="text/javascript">
var ajaxurl = "<?php echo admin_url( 'admin-ajax.php' ); ?>";
var page = 2;
var canBeLoaded = true,
bottomOffset = 2000;

jQuery(function($) {
$(window).scroll(function() {
    if( $(document).scrollTop() > ( $(document).height() - bottomOffset ) && canBeLoaded == true ) {
    canBeLoaded = false;
        var data = {
            'action': 'user_following_by_ajax',
            'page': page,
            'security': '<?php echo wp_create_nonce("user_more_following"); ?>'
        };
        $.post(ajaxurl, data, function(response) {
            $('#following').append(response);
            canBeLoaded = true;
            page++;
        });
    }
});
});
</script>

А это из function.php обработчика Ajax.

add_action('wp_ajax_user_following_by_ajax', 'user_following_by_ajax_callback');
add_action('wp_ajax_nopriv_user_following_by_ajax', 'user_following_by_ajax_callback');

function user_following_by_ajax_callback() {
    check_ajax_referer('user_more_following', 'security');
    $paged = $_POST['page'];

$curauth = (isset($_GET['author_name'])) ? get_user_by('slug', $author_name) : get_userdata(intval($author));

$include = get_user_meta($curauth->ID, '_pwuf_following', true);


if ( empty( $include ) ) {

     echo 'Not followed anyone yet.';

    } else {

$args = array (
    'order' => 'DESC',
    'include'  => $include,
    'number'  => 52,
    'paged' => $paged
);

$wp_user_query = new WP_User_Query( $args );

$users = $wp_user_query->get_results();

    echo '<div id="top-artists-contributors-3">';
    echo '<ul id="grid-contributors-4">';
    echo '<li class="scroll-artists">';
    foreach ( $users as $user ) {
        $avatar_size = 90;
        $avatar = get_avatar($user->user_email, 200);
        $author_profile_url = get_author_posts_url($user->ID);
        $profile = get_userdata($user->ID);

    echo '<div class="single-item-3">';
    echo '<div class="author-gravatar-3"><a href="', $author_profile_url, '">', $avatar , '</a></div>';
    echo '<div class="members-name"><a href="', $author_profile_url, '">' . $profile->first_name .'</a></div>';
    echo '</div>';           
    }
    echo '</li>';
    echo '</ul>';
    echo '</div>';
    }
    wp_die();
}

person Adham Mohamed    schedule 24.09.2018    source источник
comment
ты пробовал get_current_user_id() ?   -  person dipmala    schedule 24.09.2018
comment
Спасибо за ваш комментарий, да, я пробовал, но ничего не произошло, не могли бы вы дать мне ответ, как правильно это сделать, чтобы получить ту же метаданную пользователя в функции Ajax и списке подписчиков пользователя.   -  person Adham Mohamed    schedule 24.09.2018
comment
Я не понимаю эту строку в вашем обратном вызове AJAX: $curauth = (isset($_GET['author_name'])) ? get_user_by('slug', $author_name) : get_userdata(intval($author)); кажется, что ни $author_name, ни $author не установлены, и откуда берется параметр GET, так как вы делаете $.post?   -  person Hans    schedule 24.09.2018
comment
Спасибо, @Michael, слушайте, я новичок в wp, и я просто художник, начинающий с нового сайта с несколькими авторами. Итак, все, что я сделал из поиска, теперь у меня есть небольшие знания, чтобы вставлять код, но я все еще не могу кодировать, Итак, пожалуйста, если вы можете дать мне правильный код или как я могу заставить его работать! Кстати, эта строка взята из author.php, пытающегося получить ту же метаданную пользователя из meta_key _pwuf_following.   -  person Adham Mohamed    schedule 24.09.2018


Ответы (1)


Я вижу, вы не передаете поле author_name, которое используется в вашем коде. Пожалуйста, проверьте ниже код, где я добавил отсутствующее поле.

           <script type="text/javascript">
            var ajaxurl = "<?php echo admin_url( 'admin-ajax.php' ); ?>";
            var page = 2;
            var canBeLoaded = true,
            bottomOffset = 2000;


            jQuery(function($) {
            $(window).scroll(function() {
                if( $(document).scrollTop() > ( $(document).height() - bottomOffset ) && canBeLoaded == true ) {
                canBeLoaded = false;
                    var data = {
                        'action': 'user_following_by_ajax',
                        'data': { page : 'page', author_name: '<?php echo get_the_author(); ?>' }, // Here set author name which you are getting.
                        'security': '<?php echo wp_create_nonce("user_more_following"); ?>'
                    };
                    $.post(ajaxurl, data, function(response) {
                        $('#following').append(response);
                        canBeLoaded = true;
                        page++;
                    });
                }
            });
            });
            </script>
person dipmala    schedule 24.09.2018
comment
Спасибо! Я добавил вашу строку, но ничего не происходит, я получаю сообщение «Ни за кем еще не следил», а не за пользователями. Остальной код в порядке? - person Adham Mohamed; 24.09.2018
comment
Здесь вам нужно передать имя автора в данных - person dipmala; 24.09.2018
comment
И каждый раз я пролистываю вверх. Не следил за кем-то еще, повторяю. - person Adham Mohamed; 24.09.2018
comment
Извините, как я могу передать имя автора в данных, я очень новичок в wp ;(, и я ценю ваше время. - person Adham Mohamed; 24.09.2018
comment
Спасибо! Но я думаю, что основная проблема заключается в том, как переопределить $curauth = (isset($_GET['author_name'])) ? get_user_by('slug', $author_name) : get_userdata(intval($author)); в функцию обработчика Ajax, когда вместо этого я использовал $author = wp_get_current_user();.. с $include = get_user_meta($author->ID, '_pwuf_following', true); он работает с wp_get_current_user();, но я не вижу следующих наших пользователей, я вижу своих собственных пользователей профили, вы поняли это сейчас? - person Adham Mohamed; 24.09.2018