افزودن علاقه مندی ها بدون افزونه

  • نویسنده موضوع نویسنده موضوع Parsaee
  • تاریخ شروع تاریخ شروع

Parsaee

مدیریت کل سایت
پرسنل مدیریت
امروز با گذاشتن کلی وقت افزودن به علاقه مندی ها را با کد برای یکی از دوستان انجام دادم که نیاز دیدم برای استفاده شما نیز اینجا قرار دهم

1- این کد را در فایل functions.php قالب قرار دهید:

PHP:
function create_wishlist_table() {

global $wpdb;

$table_name = $wpdb->prefix . 'wishlist';

$charset_collate = $wpdb->get_charset_collate();

$sql = "CREATE TABLE IF NOT EXISTS $table_name (

id BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,

user_id BIGINT(20) UNSIGNED NOT NULL,

product_id BIGINT(20) UNSIGNED NOT NULL,

PRIMARY KEY (id)

) $charset_collate;";

require_once(ABSPATH . 'wp-admin/includes/upgrade.php');

dbDelta($sql);

}

add_action('after_setup_theme', 'create_wishlist_table');

function add_wishlist_button() {

global $product;

$product_id = $product->get_id();

$user_id = get_current_user_id();

global $wpdb;

$table_name = $wpdb->prefix . 'wishlist';

$exists = $wpdb->get_var($wpdb->prepare("SELECT COUNT(*) FROM $table_name WHERE user_id = %d AND product_id = %d", $user_id, $product_id));

$button_text = $exists ? 'حذف از علاقه‌مندی‌ها' : 'افزودن به علاقه‌مندی‌ها';

echo '<button class="wishlist-button" data-product-id="' . $product_id . '">' . $button_text . '</button>';

}

add_action('woocommerce_after_add_to_cart_button', 'add_wishlist_button');

function handle_wishlist_ajax() {

if (!is_user_logged_in()) {

wp_send_json_error('لطفاً ابتدا وارد شوید.');

}

$user_id = get_current_user_id();

$product_id = intval($_POST['product_id']);

global $wpdb;

$table_name = $wpdb->prefix . 'wishlist';

$exists = $wpdb->get_var($wpdb->prepare("SELECT COUNT(*) FROM $table_name WHERE user_id = %d AND product_id = %d", $user_id, $product_id));

if ($exists) {

$wpdb->delete($table_name, ['user_id' => $user_id, 'product_id' => $product_id]);

wp_send_json_success('محصول از علاقه‌مندی‌ها حذف شد.');

} else {

$wpdb->insert($table_name, ['user_id' => $user_id, 'product_id' => $product_id]);

wp_send_json_success('محصول به علاقه‌مندی‌ها افزوده شد.');

}

}

add_action('wp_ajax_handle_wishlist', 'handle_wishlist_ajax');

add_action('wp_ajax_nopriv_handle_wishlist', 'handle_wishlist_ajax');

function enqueue_wishlist_script() {

wp_enqueue_script('wishlist-script', get_template_directory_uri() . '/js/wishlist.js', ['jquery'], null, true);

wp_localize_script('wishlist-script', 'wishlist_ajax', [

'ajax_url' => admin_url('admin-ajax.php'),

'nonce' => wp_create_nonce('wishlist_nonce'),

]);

}

add_action('wp_enqueue_scripts', 'enqueue_wishlist_script');

function display_wishlist() {

if (!is_user_logged_in()) {

return 'لطفاً وارد حساب کاربری خود شوید.';

}

$user_id = get_current_user_id();

global $wpdb;

$table_name = $wpdb->prefix . 'wishlist';

$results = $wpdb->get_results($wpdb->prepare("SELECT product_id FROM $table_name WHERE user_id = %d", $user_id));

if (empty($results)) {

return 'لیست علاقه‌مندی‌ها خالی است.';

}

$output = '<ul class="wishlist-items">';

foreach ($results as $row) {

$product = wc_get_product($row->product_id);

$output .= '<li><a href="' . get_permalink($product->get_id()) . '">' . $product->get_name() . '</a></li>';

}

$output .= '</ul>';

return $output;

}

add_shortcode('wishlist', 'display_wishlist');


همچنین یک فایل جاوااسکریپت به نام wishlist.js در پوشه js قالب ایجاد کرده و کد زیر را در آن قرار دهید:


JavaScript:
jQuery(document).ready(function ($) {

    $('.wishlist-button').on('click', function () {

        var button = $(this);

        var product_id = button.data('product-id');


        $.ajax({

            url: wishlist_ajax.ajax_url,

            type: 'POST',

            data: {

                action: 'handle_wishlist',

                product_id: product_id,

            },

            success: function (response) {

                if (response.success) {

                    alert(response.data);

                    button.text(

                        button.text() === 'افزودن به علاقه‌مندی‌ها'

                            ? 'حذف از علاقه‌مندی‌ها'

                            : 'افزودن به علاقه‌مندی‌ها'

                    );

                } else {

                    alert(response.data);

                }

            },

        });

    });

});


حال کاربران می‌توانند محصولات را به لیست علاقه‌مندی‌های خود اضافه یا حذف کنند.
برای نمایش لیست علاقه‌مندی‌ها با شورت‌کد [wishlist] قابل نمایش است.
 
  • Like
واکنش‌ها[ی پسندها]: ahadzadeh
عقب
بالا