From Beige Dove, 1 Week ago, written in PHP.
Embed
  1. <?php
  2. /*
  3. Plugin Name: Program redaktorski
  4. */
  5.  
  6.  
  7. class Farmaceuta_Woocommerce {
  8.  
  9.     public function __construct() {
  10.    
  11.         add_filter( 'woocommerce_account_menu_items', array( $this, 'rename_address_my_account'), 999 );
  12.         add_filter( 'gettext', array( $this,'translate_like') );
  13.         add_action( 'woocommerce_after_shop_loop_item', array( $this,'remove_add_to_cart_buttons'), 1 );
  14.         remove_action( 'woocommerce_after_shop_loop_item', array( $this,'woocommerce_template_loop_add_to_cart'), 10 );
  15.         add_action( 'woocommerce_after_shop_loop_item', array( $this,'bbloomer_view_product_button'), 10);
  16.         add_filter( 'woocommerce_get_availability', array( $this,'wcs_custom_get_availability'), 1, 2);
  17.         add_filter( 'woocommerce_get_price_html', array( $this, 'bbloomer_price_free_zero_empty'), 100, 2 );
  18.         add_filter( 'woocommerce_email_recipient_customer_completed_order', array( $this, 'bbloomer_disable_customer_order_email_if_free'), 10, 2 );
  19.         remove_action( 'woocommerce_after_single_product_summary', array( $this, 'woocommerce_output_product_data_tabs'), 10 );
  20.         add_action( 'woocommerce_after_single_product_summary', array( $this, 'bbloomer_wc_output_long_description'), 10 );
  21.         add_filter( 'woocommerce_product_tabs', array( $this, 'remove_info_tab'), 98);
  22.         add_filter( 'woocommerce_product_tabs', array( $this, 'remove_reviews_tab'), 98);
  23.         add_action( 'woocommerce_before_checkout_form', array( $this, 'bbloomer_deny_checkout_user_pending_orders'));
  24.         add_action( 'woocommerce_before_single_product', array( $this,'check_users_by_product_by_same_category'), 10 );
  25.  
  26.  
  27.    
  28.     }  
  29.  
  30.  
  31.  
  32.         // Zmiana nazwy zakładki "Moje zamówienia" na "Moje zlecenia"        
  33.         public function rename_address_my_account( $items ) {
  34.         $items['orders'] = 'Moje zlecenia';
  35.         return $items;
  36.         }
  37.  
  38.         // Zmiana tekstu "Pokrewne produkty"
  39.         public function translate_like($translated) {
  40.         $translated = str_ireplace('Pokrewne produkty', 'Inne artykuły', $translated);
  41.         return $translated;
  42.         }
  43.  
  44.          //Usuniecie "dodaj do koszyka"
  45.         public function remove_add_to_cart_buttons() {
  46.             remove_action( 'woocommerce_after_shop_loop_item', 'woocommerce_template_loop_add_to_cart' );
  47.         }
  48.  
  49.         //zmiana przycisku dodaj do koszyka na zobacz szczegoly
  50.         public function bbloomer_view_product_button() {
  51.         global $product;
  52.         $link = $product->get_permalink();
  53.         echo '<a href="' . $link . '" class="button addtocartbutton">Zobacz szczegóły</a>';
  54.         }
  55.  
  56.         // Zmiana tekstu "na stanie"
  57.         public function wcs_custom_get_availability( $availability, $_product ) {  
  58.             if ( $_product->is_in_stock() ) {
  59.                 $availability['availability'] = __('Zlecenie dostępne', 'woocommerce');
  60.             }
  61.                return $availability;
  62.         }
  63.  
  64.         //dodawanie linku szczegółów na liście zleceń
  65.         //add_action( 'woocommerce_before_shop_loop_item', 'add_product_link', 11 );
  66.         //function add_product_link() {
  67.         //     global $product;
  68.         //
  69.         //     echo '<a style="float: right;" href="' . esc_url( get_permalink( $product->id ) ) . '">Zobacz szczegóły</a>';
  70.         //}
  71.  
  72.         /**
  73.         * @snippet       Display &quot;FREE&quot; if WooCommerce Product Price is Zero or Empty - WooCommerce
  74.         * @how-to        Watch tutorial @ https://businessbloomer.com/?p=19055
  75.         * @sourcecode    https://businessbloomer.com/?p=73147
  76.         * @author        Rodolfo Melogli
  77.         * @testedwith    WooCommerce 3.5.2
  78.         * @donate $9     https://businessbloomer.com/bloomer-armada/
  79.         */
  80.          
  81.          
  82.         public function bbloomer_price_free_zero_empty( $price, $product ){
  83.          
  84.         if ( '' === $product->get_price() || 0 == $product->get_price() ) {
  85.             $price = '<span class="woocommerce-Price-amount amount">10 dni roboczych na napisanie.</span>';
  86.         }
  87.          
  88.         return $price;
  89.         }
  90.  
  91.          
  92.         // Here comes the WooCommerce "hack"...
  93.         // If Total = 0 we change the email recipient to ""
  94.          
  95.         public function bbloomer_disable_customer_order_email_if_free( $recipient, $order ) {
  96.             $page = $_GET['page'] = isset( $_GET['page'] ) ? $_GET['page'] : '';
  97.             if ( 'wc-settings' === $page ) {
  98.             return $recipient;
  99.             }
  100.             if( $order->get_total() === '0,00' ) $recipient = '';
  101.             return $recipient;
  102.         }
  103.  
  104.         //usuwanie zakladek w produktach
  105.          
  106.         public function bbloomer_wc_output_long_description() {
  107.         ?>
  108.             <div class="woocommerce-tabs">
  109.             <?php the_content(); ?>
  110.             </div>
  111.         <?php
  112.         }
  113.  
  114.         // Remove Additional Information Tab WooCommerce
  115.          
  116.         public function remove_info_tab($tabs) {
  117.          
  118.          unset($tabs['additional_information']);
  119.          
  120.          return $tabs;
  121.         }
  122.  
  123.  
  124.         // Remove Reviews Tab WooCommerce
  125.         public function remove_reviews_tab($tabs) {
  126.          
  127.          unset($tabs['reviews']);
  128.          
  129.          return $tabs;
  130.         }
  131.  
  132.         public function bbloomer_deny_checkout_user_pending_orders( $posted ) {
  133.             global $woocommerce;
  134.          
  135.             // Get current customer/user
  136.             $customer = wp_get_current_user();
  137.          
  138.             // If user is not empty, get orders
  139.             if (!empty($customer)) {
  140.                 $customer_orders = get_posts(
  141.                     array(
  142.                         'numberposts' => -1,
  143.                         'meta_key'    => '_customer_user',
  144.                         'meta_value'  => $customer->ID,
  145.                         'post_type'   => 'shop_order', // WC orders post type
  146.                         'post_status' => 'wc-pending' // Only orders with status "completed"
  147.                     )
  148.                 );
  149.          
  150.                 // Check number of pending customer orders
  151.                 if ( count($customer_orders) > 0 ) {
  152.                     wc_add_notice('Sorry, please pay your pending orders first by logging into your account', 'error');
  153.                 }
  154.             }
  155.         }
  156.  
  157.  
  158.         // sparwdz czy user kupil produkt z danej kategorii
  159.         public function check_users_by_product_by_same_category() {
  160.  
  161.                 $users_list_order_ctaegory = [];
  162.  
  163.                 $current_user = wp_get_current_user();
  164.  
  165.                         $customer_orders = get_posts( array(
  166.                             'numberposts' => -1,
  167.                             'meta_key'    => '_customer_user',
  168.                             'meta_value'  => $current_user->ID,
  169.                             'post_type'   => wc_get_order_types(),
  170.                             'post_status' => array_keys( wc_get_order_statuses() ),
  171.                         ) );
  172.  
  173.                         // Pobierz id produktow ktore kupil user
  174.                     if ( ! $customer_orders ) return;
  175.                     $product_ids = array();
  176.                     foreach ( $customer_orders as $customer_order ) {
  177.                         $order = new WC_Order( $customer_order->ID );
  178.                         $items = $order->get_items();
  179.                         foreach ( $items as $item ) {
  180.                             $product_id = $item->get_product_id();
  181.                             $product_ids[] = $product_id;
  182.                         }
  183.                     }
  184.                     $product_ids = array_unique( $product_ids );
  185.  
  186.                     // pobieramy kategorie produktów
  187.  
  188.                     foreach ($product_ids AS $product_id) {
  189.  
  190.                         $category_products = get_the_terms ( $product_id, 'product_cat' );
  191.                                         foreach ( $category_products as $term ) {
  192.                                              $cat_name = $term->term_id;
  193.                                              array_push($users_list_order_ctaegory, $cat_name);
  194.                                         }
  195.  
  196.                     }
  197.  
  198.                         global $post;
  199.                                 $terms = get_the_terms( $post->ID, 'product_cat' );
  200.                                 $nterms = get_the_terms( $post->ID, 'product_tag'  );
  201.                                 foreach ($terms  as $term  ) {
  202.                                     $product_cat_id = $term->term_id;
  203.                                     break;
  204.                                 }
  205.  
  206.                 if ( in_array($product_cat_id, $users_list_order_ctaegory)) {
  207.  
  208.                         $aa = 'tak';
  209.  
  210.                         //remove_filters_for_anonymous_class('woocommerce_before_single_product', 'YITH_WOCC_Frontend', 'add_button', 10);
  211.                         self::remove_filters_for_anonymous_class('woocommerce_before_single_product', 'YITH_WOCC_Frontend', 'add_button', 10);
  212.        
  213.  
  214.                 } else {
  215.                         $aa = 'nie';
  216.                 }
  217.                 echo $aa;
  218.  
  219.        
  220.  
  221.                         file_put_contents('filename.txt', print_r($product_cat_id, true));
  222.  
  223.  
  224.  
  225.         }
  226.         public function remove_filters_with_method_name( $hook_name = '', $method_name = '', $priority = 0 ) {
  227.                             global $wp_filter;
  228.                             // Take only filters on right hook name and priority
  229.                             if ( ! isset( $wp_filter[ $hook_name ][ $priority ] ) || ! is_array( $wp_filter[ $hook_name ][ $priority ] ) ) {
  230.                                 return false;
  231.                             }
  232.                             // Loop on filters registered
  233.                             foreach ( (array) $wp_filter[ $hook_name ][ $priority ] as $unique_id => $filter_array ) {
  234.                                 // Test if filter is an array ! (always for class/method)
  235.                                 if ( isset( $filter_array['function'] ) && is_array( $filter_array['function'] ) ) {
  236.                                     // Test if object is a class and method is equal to param !
  237.                                     if ( is_object( $filter_array['function'][0] ) && get_class( $filter_array['function'][0] ) && $filter_array['function'][1] == $method_name ) {
  238.                                         // Test for WordPress >= 4.7 WP_Hook class (https://make.wordpress.org/core/2016/09/08/wp_hook-next-generation-actions-and-filters/)
  239.                                         if ( is_a( $wp_filter[ $hook_name ], 'WP_Hook' ) ) {
  240.                                             unset( $wp_filter[ $hook_name ]->callbacks[ $priority ][ $unique_id ] );
  241.                                         } else {
  242.                                             unset( $wp_filter[ $hook_name ][ $priority ][ $unique_id ] );
  243.                                         }
  244.                                     }
  245.                                 }
  246.                             }
  247.                             return false;
  248.                         }
  249.                         /**
  250.                          * Allow to remove method for an hook when, it's a class method used and class don't have variable, but you know the class name :)
  251.                          */
  252.                         public function remove_filters_for_anonymous_class( $hook_name = '', $class_name = '', $method_name = '', $priority = 0 ) {
  253.                             global $wp_filter;
  254.                             // Take only filters on right hook name and priority
  255.                             if ( ! isset( $wp_filter[ $hook_name ][ $priority ] ) || ! is_array( $wp_filter[ $hook_name ][ $priority ] ) ) {
  256.                                 return false;
  257.                             }
  258.                             // Loop on filters registered
  259.                             foreach ( (array) $wp_filter[ $hook_name ][ $priority ] as $unique_id => $filter_array ) {
  260.                                 // Test if filter is an array ! (always for class/method)
  261.                                 if ( isset( $filter_array['function'] ) && is_array( $filter_array['function'] ) ) {
  262.                                     // Test if object is a class, class and method is equal to param !
  263.                                     if ( is_object( $filter_array['function'][0] ) && get_class( $filter_array['function'][0] ) && get_class( $filter_array['function'][0] ) == $class_name && $filter_array['function'][1] == $method_name ) {
  264.                                         // Test for WordPress >= 4.7 WP_Hook class (https://make.wordpress.org/core/2016/09/08/wp_hook-next-generation-actions-and-filters/)
  265.                                         if ( is_a( $wp_filter[ $hook_name ], 'WP_Hook' ) ) {
  266.                                             unset( $wp_filter[ $hook_name ]->callbacks[ $priority ][ $unique_id ] );
  267.                                         } else {
  268.                                             unset( $wp_filter[ $hook_name ][ $priority ][ $unique_id ] );
  269.                                         }
  270.                                     }
  271.                                 }
  272.                             }
  273.                             return false;
  274.                         }
  275.  
  276.  
  277.  
  278.  
  279.  
  280. }
  281.  
  282. $Farmaceuta_Woocommerce = new Farmaceuta_Woocommerce();
  283.  
  284.  
  285.  
  286.  
  287.