_version = $version; $this->_token = AWDP_TOKEN; $this->file = $file; $this->dir = dirname($this->file); $this->assets_dir = trailingslashit($this->dir) . 'assets'; $this->assets_url = esc_url(trailingslashit(plugins_url('/assets/', $this->file))); $this->plugin_slug = 'abc'; $this->script_suffix = defined('SCRIPT_DEBUG') && SCRIPT_DEBUG ? '' : '.min'; register_activation_hook($this->file, array($this, 'install')); register_deactivation_hook($this->file, array($this, 'deactivation')); add_action('save_post', array($this, 'delete_transient'), 1); add_action('edited_term', array($this, 'delete_transient')); add_action('delete_term', array($this, 'delete_transient')); add_action('created_term', array($this, 'delete_transient')); add_action('admin_menu', array($this, 'register_root_page')); add_action('admin_enqueue_scripts', array($this, 'admin_enqueue_scripts'), 10, 1); add_action('admin_enqueue_scripts', array($this, 'admin_enqueue_styles'), 10, 1); $plugin = plugin_basename($this->file); add_filter("plugin_action_links_$plugin", array($this, 'add_settings_link')); } /** * * * Ensures only one instance of WCPA is loaded or can be loaded. * * @since 1.0.0 * @static * @see WordPress_Plugin_Template() * @return Main WCPA instance */ public static function instance($file = '', $version = '1.0.0') { if (is_null(self::$_instance)) { self::$_instance = new self($file, $version); } return self::$_instance; } public function register_root_page() { $this->hook_suffix[] = add_menu_page( 'Pricing Rules', 'Pricing Rules', 'edit_products', 'awdp_admin_ui', array($this, 'admin_ui'), esc_url($this->assets_url).'/images/icon.png',25); $this->hook_suffix[] = add_submenu_page( 'awdp_admin_ui', 'Product Lists', 'Product Lists', 'edit_products', 'awdp_admin_product_lists', array($this, 'admin_ui_pro_lists')); } public function admin_ui() { AWDP_Backend::view('admin-root', []); } public function add_settings_link($links) { $settings = '' . __('Pricing Rules') . ''; $products = '' . __('Product Lists') . ''; array_push($links, $settings); array_push($links, $products); return $links; } /** * Create post type forms */ static function view($view, $data = array()) { extract($data); include(plugin_dir_path(__FILE__) . 'views/' . $view . '.php'); } // End admin_enqueue_styles () public function admin_ui_pro_lists() { AWDP_Backend::view('admin-lists', []); } /** * Load admin CSS. * @access public * @since 1.0.0 * @return void */ public function admin_enqueue_styles($hook = '') { wp_enqueue_style('wp-color-picker'); wp_register_style($this->_token . '-admin', esc_url($this->assets_url) . 'css/backend.css', array(), $this->_version); wp_enqueue_style($this->_token . '-admin'); } /** * Load admin Javascript. * @access public * @since 1.0.0 * @return void */ public function admin_enqueue_scripts($hook = '') { if (!isset($this->hook_suffix) || empty($this->hook_suffix)) { return; } $categories = get_terms('product_cat', ['taxonomy' => 'product_cat', 'hide_empty' => false, 'fields' => 'id=>name']); // $productslist = get_posts(array('numberposts' => -1, 'post_type' => 'product')); // $p = 0; // foreach ($productslist as $product) { // $products[$p]['ID'] = $product->ID; // $products[$p]['post_title'] = $product->post_title; // $products[$p]['post_thumbnail'] = get_the_post_thumbnail_url($product->ID); // $p++; // } $wp_roles = new WP_Roles(); $user_roles = array_map(function ($v) { return $v['name']; }, $wp_roles->roles); $awdpList = get_posts(array('numberposts' => -1, 'post_type' => AWDP_PRODUCT_LIST)); $awdpList = array_map(function ($v) { return ['id' => $v->ID, 'name' => $v->post_title]; }, $awdpList); $userlists = get_users(array('role__in' => array('administrator', 'author', 'contributor'))); $userlists = array_map(function ($v) { return ['id' => $v->ID, 'display_name' => $v->display_name == '' ? $v->user_login : $v->display_name]; }, $userlists); $taglist = get_terms(array('hide_empty' => false, 'taxonomy' => 'product_tag')); // $installed_payment_methods = WC()->payment_gateways->get_available_payment_gateways(); $installed_payment_methods =[]; $installed_payment_methods = array_map(function ($v) { return ['title' => $v->title]; }, $installed_payment_methods); $screen = get_current_screen(); wp_enqueue_script('jquery'); if (in_array($screen->id, $this->hook_suffix)) { wp_enqueue_script($this->_token . '-backend-script', esc_url($this->assets_url) . 'js/backend.js', array('jquery'), $this->_version, true); wp_localize_script($this->_token . '-backend-script', 'awdp_object', array( 'api_nonce' => wp_create_nonce('wp_rest'), 'root' => rest_url('awdp/v1/'), 'cats' => (array)$categories, 'tags' => (array)$taglist, 'user_roles' => (array)$user_roles, 'productlist' => (array)$awdpList, 'userlists' => (array)$userlists, 'paymentgateways' => (array)$installed_payment_methods ) ); } wp_register_script($this->_token . '-backend', esc_url($this->assets_url) . 'js/backend.js', array('jquery'), $this->_version); } /** * Cloning is forbidden. * * @since 1.0.0 */ public function __clone() { _doing_it_wrong(__FUNCTION__, __('Cheatin’ huh?'), $this->_version); } /** * Unserializing instances of this class is forbidden. * * @since 1.0.0 */ public function __wakeup() { _doing_it_wrong(__FUNCTION__, __('Cheatin’ huh?'), $this->_version); } /** * Installation. Runs on activation. * @access public * @since 1.0.0 * @return void */ public function install() { $this->_log_version_number(); } /** * Log the plugin version number. * @access public * @since 1.0.0 * @return void */ private function _log_version_number() { update_option($this->_token . '_version', $this->_version); } public function delete_transient($arg = false) { if ($arg) { in_array(get_post_type($arg), ['product', WCPA_POST_TYPE]) && delete_transient(WCPA_PRODUCTS_TRANSIENT_KEY); } else { delete_transient(WCPA_PRODUCTS_TRANSIENT_KEY); } } }