define_constants();
add_action('plugins_loaded', array($this, 'init_hooks'), 30);
}
protected function define_constants(){
$this->define('ASTWFG_PLUGIN_FILE', __FILE__);
}
private function define($name, $value){
if (!defined($name)) {
define($name, $value);
}
}
private function is_request($type)
{
switch ($type) {
case 'admin' :
return is_admin();
case 'ajax' :
return defined('DOING_AJAX');
case 'cron' :
return defined('DOING_CRON');
case 'frontend' :
return (!is_admin() || defined('DOING_AJAX')) && !defined('DOING_CRON');
}
}
public function plugins_loaded(){
if ( ! function_exists( 'WC' ) ) {
add_action( 'admin_notices', array($this, 'install_woocommerce_admin_notice') );
}
}
public function install_woocommerce_admin_notice(){
?>
is_request('admin')) {
add_action('woocommerce_product_options_related', array($this, 'backend_options'));
add_action('woocommerce_process_product_meta', array($this, 'save_data'), 10, 2);
} else {
add_action('woocommerce_add_to_cart', array($this, 'add_gift_to_cart'), 50, 6);
add_action('woocommerce_cart_item_removed', array($this, 'remove_cart_item'), 10, 2);
add_action('woocommerce_single_product_summary', array($this, 'single_product_gift'), 20);
add_filter('woocommerce_cart_item_quantity', array($this, 'item_quantity'), 10, 3);
add_filter('woocommerce_cart_item_class', array($this, 'cart_class'), 10, 3);
add_action('wp_enqueue_scripts', array($this, 'load_scripts'));
}
}
public function installed_callback(){
}
public function load_domain(){
$locale = get_locale();
load_textdomain('astro-woocommerce-free-gift', WP_LANG_DIR . '/astro-woocommerce-free-gift/astro-woocommerce-free-gift-' . $locale . '.mo');
load_plugin_textdomain('astro-woocommerce-free-gift', false, plugin_basename(dirname(__FILE__)) . "/languages");
}
public function load_scripts(){
wp_enqueue_script('jquery');
wp_enqueue_style('astro-woofg-frontend', plugin_dir_url(__FILE__) . 'assets/css/frontend.css', false, $this->vertion);
wp_enqueue_script('astro-woofg-js', plugin_dir_url(__FILE__) . 'assets/js/frontend.js', array('jquery'), $this->vertion, true);
}
public function backend_options(){
global $post;
?>
_data_key, $productgift_ids);
}
public function add_gift_to_cart($cart_item_key, $product_id, $quantity, $variation_id, $variation, $cart_item_data){
$gift_ids = array_filter(array_map('absint', (array)get_post_meta($product_id, $this->_data_key, true)));
if (!empty($gift_ids)) {
foreach ($gift_ids as $gift_id) {
$product_status = get_post_status($gift_id);
$gift_variation_id = $this->create_gift_variation($gift_id);
if (false !== WC()->cart->add_to_cart($gift_id, $quantity, $gift_variation_id, array(__('Type', 'astro-woocommerce-free-gift') => __('Free gift', 'astro-woocommerce-free-gift')), array('gift_for' => $product_id, 'gift_for_item' => $cart_item_key)) && 'publish' === $product_status) {
do_action('woocommerce_ajax_added_to_cart', $gift_id);
if (get_option('woocommerce_cart_redirect_after_add') == 'yes') {
wc_add_to_cart_message(array($gift_id => $quantity), true);
}
}
}
}
}
public function remove_cart_item($cart_item_key_removed, $cart){
foreach ($cart->cart_contents as $cart_item_key => $cart_item) {
if (isset($cart_item['gift_for_item']) && $cart_item_key_removed === $cart_item['gift_for_item']) {
$cart->remove_cart_item($cart_item_key);
}
}
}
private function create_gift_variation($product_id)
{
//check variation product exist
$product_variation = get_posts(array(
'post_parent' => $product_id,
's' => 'astro_product_gift_item',
'post_type' => 'product_variation',
'posts_per_page' => 1
));
if (!empty($product_variation)) {
$this->update_gift_metadata($product_variation[0]->ID, $product_id);
return $product_variation[0]->ID;
}
$author = get_users(array(
'orderby' => 'nicename',
'role' => 'administrator',
'number' => 1
));
$variation = array(
'post_author' => $author[0]->ID,
'post_status' => 'publish',
'post_name' => 'product-gift-variation-' . absint($product_id),
'post_parent' => $product_id,
'post_title' => 'astro_product_gift_item',
'post_type' => 'product_variation',
'comment_status' => 'closed',
'ping_status' => 'closed',
);
$_gift_id = wp_insert_post($variation);
$this->update_gift_metadata($_gift_id, $product_id);
return $_gift_id;
}
private function update_gift_metadata($gift_id, $product_id) {
update_post_meta($gift_id, '_price', 0);
update_post_meta($gift_id, '_sale_price', 0);
update_post_meta($gift_id, '_regular_price', get_post_meta($product_id, '_regular_price', true));
update_post_meta($gift_id, '_virtual', get_post_meta($product_id, '_virtual', true));
//update_post_meta( $gift_id, '_sold_individually', 'yes');
}
public function item_quantity($product_quantity, $cart_item_key, $cart_item){
$_product = $cart_item['data'];
if(!empty($cart_item['gift_for'])) {
ob_start();
?>
ID, $this->_data_key, true)));
if (empty($product_ids)) return;
$_count = count($product_ids);
$_total_price = 0;
ob_start();
foreach ($product_ids as $product_id) :
$product = new WC_Product($product_id);
?>
get_image(); ?>
get_price_html();?>
get_price());
endforeach;
$_li_html = ob_get_clean();
echo '';
echo '
';
echo '
';
echo wp_kses_post($_li_html);
echo '
';
}
public function cart_class($class, $cart_item, $cart_item_key){
if(!empty($cart_item['gift_for'])) {
$class .= ' cart_item_gift';
}
return $class;
}
}
endif;
if (!function_exists('Astro_WooCommerce_Free_Gift')) {
function Astro_WooCommerce_Free_Gift()
{
return Astro_WooCommerce_Free_Gift::get_instance();
}
}
Astro_WooCommerce_Free_Gift()->init();