如何在WordPress中添加用户(作者)到收藏夹?

xe55xuns  于 2023-03-29  发布在  WordPress
关注(0)|答案(1)|浏览(142)

我有一个功能,列出了成员目录中的用户。我想给予保存用户的选项,并将其显示在保存的用户(成员)列表中,在WordPress作者。
我有下面的代码,但保存时一直有错误,它给出了一个帖子400。响应是0。
要保存的用户需要存储在保存它的用户的元数据中。
PHP语言

function display_users($args = array(), $show_all_users = true) {
        $defaults = array(
            'orderby' => 'ID',
            'order' => 'ASC',
            'role' => 'subscriber', // Add this line to filter by role
            'search' => ''
        );
        $args = wp_parse_args($args, $defaults);
    
        $wp_user_query = new WP_User_Query($args);
    
        if (!empty($wp_user_query->results)) {
            $output = '<div class="user-grid">';
            foreach ($wp_user_query->results as $user) {
                // Check if only favorites should be displayed
                if (!$show_all_users) {
                    $user_id = get_current_user_id();
                    echo $user_id;
                    $favorites = get_user_meta($user_id, 'favorites', true);
                    print_r($favorites);
                    if (!in_array($user->ID, $favorites)) {
                        // If user is not in favorites list, skip to the next user
                        continue;
                    }
                }
    
                $output .= '<div class="user">';
                $output .= '<a href="' . get_author_posts_url($user->ID) . '">';
                $output .= '<div class="user-image">' . get_avatar($user->ID, 150) . '</div>';
                if (get_field('mepr_open_to_connect', 'user_' . $user->ID) == 'always-feel-free-to-reach-out') {
                    $output .= '<p class="user-connect">Let\'s connect</p>';
                }
                $output .= '<div class="user-name">' . get_field('first_name', 'user_' . $user->ID) . '</div>';
                $output .= '<div class="user-info">';
                $output .= '<p class="user-current-work">' . get_field('mepr_current_work', 'user_' . $user->ID) . '</p>';
                $output .= '</div>';
                // Add favorite button
                if (is_user_logged_in()) {
                    $user_id = get_current_user_id();
                    $favorites = get_user_meta($user_id, 'favorites', true);
                    $is_favorite = in_array($user->ID, $favorites);
                    $output .= '<button class="favorite-button" data-user-id="' . $user->ID . '" data-is-favorite="' . $is_favorite . '">' . ($is_favorite ? 'Remove from favorites' : 'Add to favorites') . '</button>';
                }
                $output .= '</a>';
                $output .= '</div>';
            }
            $output .= '</div>';
    
            return $output;
        }
    }
    
    // add to favourites function
    function save_user_favorites() {
        // Verify nonce
        if ( ! isset( $_POST['nonce'] ) || ! wp_verify_nonce( $_POST['nonce'], 'save_user_favorites' ) ) {
            wp_send_json_error( 'Invalid nonce' );
        }
    
        // Check if user is logged in
        if ( ! is_user_logged_in() ) {
            wp_send_json_error( 'User not logged in' );
        }
    
        // Get user ID
        $user_id = get_current_user_id();
    
        // Get favorites
        $favorites = isset( $_POST['favorites'] ) ? $_POST['favorites'] : array();
    
        // Update user meta
        update_user_meta( $user_id, 'favorites', $favorites );
    
        wp_send_json_success();
    }

add_action( 'wp_ajax_nopriv_save_user_favorites', 'save_user_favorites' );
 add_action( 'wp_ajax_save_user_favorites', 'save_user_favorites' );

查询

<script defer>
jQuery(document).ready(function($) {
  // Add event listener to favorite buttons
  $('.favorite-button').click(function(e) {
    e.preventDefault();

    var button = $(this);
    var userId = button.data('userId');
    var isFavorite = button.data('isFavorite');
    var favorites = button.data('favorites');

    // Add or remove user from favorites
    if (isFavorite) {
      var index = favorites.indexOf(userId);
      if (index !== -1) {
        favorites.splice(index, 1);
      }
    } else {
      var favorites = button.data('favorites') || [];
    }

    // Save favorites to meta data
    button.data('favorites', favorites);
    button.data('isFavorite', !isFavorite);
    $.post(ajaxurl, {
  'action': 'save_user_favorites',
  'favorites': favorites,
  'nonce': '<?php echo wp_create_nonce( "save_user_favorites" ); ?>'
});

    // Toggle button text and data attribute
    button.text(isFavorite ? 'Add to favorites' : 'Remove from favorites');
  });
  
  // Load favorites from localStorage
var favorites = localStorage.getItem('favorites');
if (favorites !== null) {
    favorites = JSON.parse(favorites);
} else {
    favorites = [];
}

  // Load favorites from meta data
  $('.favorite-button').each(function() {
    var button = $(this);
    var userId = button.data('userId');
    var favorites = button.data('favorites');
    var isFavorite = favorites && favorites.includes(userId);
    button.text(isFavorite ? 'Remove from favorites' : 'Add to favorites');
    button.data('isFavorite', isFavorite);
  });
});
</script>
mfuanj7w

mfuanj7w1#

你的functions.php中缺少此钩子

add_action( 'wp_ajax_nopriv_save_user_favorites', 'save_user_favorites' );
 add_action( 'wp_ajax_save_user_favorites', 'save_user_favorites' );

相关问题