✏️ 正在编辑: wc-wishlist.php
路径:
/home/h359620/public_html/wp-content/themes/datis/inc/includes/woocommerce/wc-wishlist.php
提示:
您可以编辑任何文件(包括二进制文件),但请注意不当修改可能导致文件损坏。
<?php if (! defined('ABSPATH')) { exit; } if (! class_exists('Datis_WC_Wishlist')) { final class Datis_WC_Wishlist { private static $instance = null; public static function get_instance(): self { if (is_null(self::$instance)) { self::$instance = new self(); } return self::$instance; } private function __construct() { // Wishlist toggle (single product) add_action('wp_enqueue_scripts', array($this, 'enqueue_wishlist_assets')); add_action('wp_ajax_datis_toggle_wishlist', array($this, 'ajax_toggle_wishlist')); add_action('wp_ajax_nopriv_datis_toggle_wishlist', array($this, 'ajax_toggle_wishlist')); } private function __clone() {} public function __wakeup() { throw new \Exception('Cannot unserialize singleton'); } private function get_wishlist_meta_key() { return 'datis_wishlist_product_ids'; } public function get_user_wishlist_ids($user_id = 0) { $user_id = $user_id ? absint($user_id) : get_current_user_id(); if ($user_id <= 0) return array(); $ids = get_user_meta($user_id, $this->get_wishlist_meta_key(), true); if (!is_array($ids)) $ids = array(); $ids = array_filter(array_map('absint', $ids)); $ids = array_values(array_unique($ids)); return $ids; } public function is_product_in_wishlist($product_id, $user_id = 0) { $product_id = absint($product_id); if ($product_id <= 0) return false; $ids = $this->get_user_wishlist_ids($user_id); return in_array($product_id, $ids, true); } private function set_user_wishlist_ids($user_id, $ids) { $user_id = absint($user_id); if ($user_id <= 0) return false; $ids = is_array($ids) ? $ids : array(); $ids = array_filter(array_map('absint', $ids)); $ids = array_values(array_unique($ids)); return update_user_meta($user_id, $this->get_wishlist_meta_key(), $ids); } public function enqueue_wishlist_assets() { if (!function_exists('is_product') || !is_product()) { return; } $handle = 'datis-woocommerce'; $rel = '/assets/js/woocommerce.js'; $path = get_template_directory() . $rel; $src = get_template_directory_uri() . $rel; $ver = file_exists($path) ? (string) filemtime($path) : '1.0.0'; wp_enqueue_script($handle, $src, array('jquery'), $ver, true); wp_localize_script($handle, 'DatisWishlist', array( 'ajax_url' => set_url_scheme(admin_url('admin-ajax.php'), is_ssl() ? 'https' : 'http'), 'nonce' => wp_create_nonce('datis_wishlist_nonce'), 'i18n_login_required' => esc_html_x('Please log in to use favorites.', 'Wishlist', 'datis'), 'i18n_error' => esc_html_x('Something went wrong. Please try again.', 'Wishlist', 'datis'), )); } public function ajax_toggle_wishlist() { // Nonce $nonce = isset($_POST['nonce']) ? sanitize_text_field(wp_unslash($_POST['nonce'])) : ''; if (!$nonce || !wp_verify_nonce($nonce, 'datis_wishlist_nonce')) { wp_send_json_error(array('message' => 'bad_nonce'), 403); } $product_id = isset($_POST['product_id']) ? absint($_POST['product_id']) : 0; if ($product_id <= 0 || get_post_type($product_id) !== 'product') { wp_send_json_error(array('message' => 'invalid_product'), 400); } // Require login (cleanest) if (!is_user_logged_in()) { wp_send_json_error(array( 'message' => 'login_required', 'login_url' => function_exists('wc_get_page_permalink') ? wc_get_page_permalink('myaccount') : wp_login_url(get_permalink($product_id)), ), 401); } $user_id = get_current_user_id(); $ids = $this->get_user_wishlist_ids($user_id); $in_list = in_array($product_id, $ids, true); if ($in_list) { // remove $ids = array_values(array_diff($ids, array($product_id))); $this->set_user_wishlist_ids($user_id, $ids); wp_send_json_success(array( 'in_wishlist' => 0, 'count' => count($ids), )); } // add $ids[] = $product_id; $this->set_user_wishlist_ids($user_id, $ids); wp_send_json_success(array( 'in_wishlist' => 1, 'count' => count($ids), )); } } // Bootstrap Datis_WC_Wishlist::get_instance(); // Template tag if (! function_exists('datis_wc_wishlist')) { function datis_wc_wishlist(array $args = []): void { Datis_WC_Wishlist::get_instance()->render(true, $args); } } }
💾 保存文件
← 返回文件管理器