• Namespace
  • Class
  • Tree
  • Deprecated
  • Todo
  • Hooks

Namespaces

  • None
  • SIW
    • Admin
    • API
    • Async
    • Batch
    • Compatibility
    • Data
    • Elements
    • Email
    • External
    • Forms
    • Modules
    • Newsletter
    • Page_Builder
    • Plato
    • Widgets
    • WooCommerce
      • Admin
      • Checkout
      • Email
      • Export
      • Frontend
      • Import

Classes

  • SIW\Admin\Admin
  • SIW\Admin\Admin_Bar
  • SIW\Admin\Notices
  • SIW\Admin\Options_Page
  • SIW\Admin\Properties_Page
  • SIW\Admin\Shortcodes
  • SIW\Admin\User_Columns
  • SIW\Animation
  • SIW\API\Endpoint
  • SIW\API\Newsletter_Subscribe
  • SIW\API\Postcode_Lookup
  • SIW\Assets
  • SIW\Async\Process_Stockphoto_Upload
  • SIW\Async\Request
  • SIW\Attachment
  • SIW\Autoloader
  • SIW\Batch\Count_Workcamps
  • SIW\Batch\Delete_Applications
  • SIW\Batch\Delete_Old_Posts
  • SIW\Batch\Delete_Orphaned_Variations
  • SIW\Batch\Delete_Workcamps
  • SIW\Batch\Job
  • SIW\Batch\Send_Workcamp_Approval_Emails
  • SIW\Batch\Update_Dutch_Workcamps
  • SIW\Batch\Update_Free_Places
  • SIW\Batch\Update_SEO_Noindex
  • SIW\Batch\Update_Taxonomies
  • SIW\Batch\Update_Workcamp_Tariffs
  • SIW\Batch\Update_Workcamp_Visibility
  • SIW\Batch\Update_Workcamps
  • SIW\Bootstrap
  • SIW\Compatibility\Caldera_Forms
  • SIW\Compatibility\Mailpoet
  • SIW\Compatibility\Meta_Box
  • SIW\Compatibility\Password_Protected
  • SIW\Compatibility\Pinnacle_Premium
  • SIW\Compatibility\Plugins
  • SIW\Compatibility\Safe_Redirect_Manager
  • SIW\Compatibility\SiteOrigin_Page_Builder
  • SIW\Compatibility\The_SEO_Framework
  • SIW\Compatibility\UpdraftPlus
  • SIW\Compatibility\WooCommerce
  • SIW\Compatibility\WordPress
  • SIW\Compatibility\WP_Rocket
  • SIW\Compatibility\WP_Sentry_Integration
  • SIW\Compatibility\WPML
  • SIW\CSS
  • SIW\Data\Continent
  • SIW\Data\Country
  • SIW\Data\Currency
  • SIW\Data\Language
  • SIW\Data\Social_Network
  • SIW\Data\Work_Type
  • SIW\Elements
  • SIW\Elements\Accordion
  • SIW\Elements\Carousel
  • SIW\Elements\Chart
  • SIW\Elements\Google_Maps
  • SIW\Elements\Interactive_Map
  • SIW\Elements\Interactive_Map_Destinations
  • SIW\Elements\Interactive_Map_ESC
  • SIW\Elements\Interactive_Map_Netherlands
  • SIW\Elements\Modal
  • SIW\Elements\Pie_Chart
  • SIW\Elements\Tablist
  • SIW\Elements\Taxonomy_Filter
  • SIW\Elements\World_Map
  • SIW\Email\Configuration
  • SIW\Email\Template
  • SIW\External\Exchange_Rates
  • SIW\External\Mailjet
  • SIW\External\Postcode_Lookup
  • SIW\External\Spam_Check
  • SIW\Formatting
  • SIW\Forms
  • SIW\Forms\Form
  • SIW\Forms\Processor_Spam_Check
  • SIW\Head
  • SIW\htaccess
  • SIW\HTML
  • SIW\i18n
  • SIW\Icons
  • SIW\Login
  • SIW\Media_Taxonomies
  • SIW\Modules\Cache_Rebuild
  • SIW\Modules\Cookie_Notice
  • SIW\Modules\Google_Analytics
  • SIW\Modules\Menu_Cart
  • SIW\Modules\Social_Share
  • SIW\Modules\Topbar
  • SIW\Newsletter\Confirmation_Email
  • SIW\Newsletter\Confirmation_Page
  • SIW\Newsletter\Hash
  • SIW\Options
  • SIW\Page_Builder\Animation
  • SIW\Page_Builder\Visibility
  • SIW\Plato\Download_File
  • SIW\Plato\Export
  • SIW\Plato\Export_Application
  • SIW\Plato\Import
  • SIW\Plato\Import_Dutch_Workcamps
  • SIW\Plato\Import_FPL
  • SIW\Plato\Import_Workcamps
  • SIW\Plato\Plato_Interface
  • SIW\Properties
  • SIW\Scheduler
  • SIW\Shortcodes
  • SIW\Update
  • SIW\Upload_Subdir
  • SIW\Util
  • SIW\Widgets
  • SIW\Widgets\Accordion
  • SIW\Widgets\Calendar
  • SIW\Widgets\Carousel
  • SIW\Widgets\Contact
  • SIW\Widgets\CTA
  • SIW\Widgets\Dutch_Projects
  • SIW\Widgets\Features
  • SIW\Widgets\Google_Maps
  • SIW\Widgets\Infobox
  • SIW\Widgets\Map
  • SIW\Widgets\Newsletter
  • SIW\Widgets\Organisation
  • SIW\Widgets\Pie_Chart
  • SIW\Widgets\Quick_Search_Form
  • SIW\Widgets\Quick_Search_Results
  • SIW\Widgets\Quote
  • SIW\Widgets\Tabs
  • SIW\Widgets\Widget
  • SIW\WooCommerce\Admin\Coupon
  • SIW\WooCommerce\Admin\Order
  • SIW\WooCommerce\Admin\Order_Columns
  • SIW\WooCommerce\Admin\Product
  • SIW\WooCommerce\Admin\Product_Columns
  • SIW\WooCommerce\Admin\Stockphoto_Page
  • SIW\WooCommerce\Checkout\Discount
  • SIW\WooCommerce\Checkout\Fields
  • SIW\WooCommerce\Checkout\Form
  • SIW\WooCommerce\Checkout\Newsletter
  • SIW\WooCommerce\Checkout\Terms
  • SIW\WooCommerce\Checkout\Validation
  • SIW\WooCommerce\Email\Customer_On_Hold_Order
  • SIW\WooCommerce\Email\Customer_Processing_Order
  • SIW\WooCommerce\Email\Emails
  • SIW\WooCommerce\Email\New_Order
  • SIW\WooCommerce\Export\Order
  • SIW\WooCommerce\Frontend\Archive
  • SIW\WooCommerce\Frontend\Archive_Header
  • SIW\WooCommerce\Frontend\Product
  • SIW\WooCommerce\Frontend\Product_Tabs
  • SIW\WooCommerce\Import\Product
  • SIW\WooCommerce\Import\Product_Image
  • SIW\WooCommerce\Import\Product_Variations
  • SIW_Content_Type
  • SIW_Content_Type_TM_Country
  • SIW_Post_Type
  • SIW_Post_Type_Agenda
  • SIW_Post_Type_Vacatures
  • SIW_Taxonomy

Functions

  • siw_generate_event_json_ld
  • siw_generate_interactive_map
  • siw_generate_job_json_ld
  • siw_get_board_titles
  • siw_get_continent
  • siw_get_continents
  • siw_get_countries
  • siw_get_country
  • siw_get_currencies
  • siw_get_currency
  • siw_get_data
  • siw_get_data_file_ids
  • siw_get_days
  • siw_get_dutch_provinces
  • siw_get_email_settings
  • siw_get_event_data
  • siw_get_featured_job
  • siw_get_genders
  • siw_get_interactive_maps
  • siw_get_job_data
  • siw_get_language
  • siw_get_language_skill_levels
  • siw_get_languages
  • siw_get_nationalities
  • siw_get_option
  • siw_get_project_types
  • siw_get_social_networks
  • siw_get_testimonial_quote
  • siw_get_testimonial_quote_categories
  • siw_get_upcoming_events
  • siw_get_work_type
  • siw_get_work_types
  • siw_meta
  • siw_newsletter_get_lists
  • siw_newsletter_get_subscriber_count
  • siw_newsletter_send_confirmation_email
  • siw_newsletter_subscribe
  • siw_set_option
  1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  16  17  18  19  20  21  22  23  24  25  26  27  28  29  30  31  32  33  34  35  36  37  38  39  40  41  42  43  44  45  46  47  48  49  50  51  52  53  54  55  56  57  58  59  60  61  62  63  64  65  66  67  68  69  70  71  72  73  74  75  76  77  78  79  80  81  82  83  84  85  86  87  88  89  90  91  92  93  94  95  96  97  98  99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 
<?php

namespace SIW\WooCommerce\Frontend;

use SIW\WooCommerce\Import\Product as Import_Product;
use SIW\WooCommerce\Frontend\Product_Tabs;

/**
 * Aanpassingen aan Groepsproject
 *
 * @copyright 2019 SIW Internationale Vrijwilligersprojecten
 * @since     3.0.0
 * 
 * @uses      siw_get_currency()
 */
class Product {

    /**
     * Init
     */
    public static function init() {
        $self = new self();

        Product_Tabs::init();

        add_filter( 'woocommerce_is_purchasable', [ $self, 'set_product_is_purchasable'], 10, 2 );
        add_filter( 'woocommerce_available_variation', [ $self, 'set_variation_description'] );
        add_filter( 'woocommerce_sale_flash', [ $self, 'set_sales_flash_text' ] );
        add_filter( 'woocommerce_product_get_attributes', [ $self, 'order_product_attributes'] );
        add_filter( 'woocommerce_related_products_args', [ $self, 'set_related_products_number'], PHP_INT_MAX );
        add_action( 'woocommerce_after_add_to_cart_form', [ $self, 'show_local_fee'] );

        /**
         * Verwijderen diverse woocommerce-hooks
         * - "Reset variations"-link
         * - Prijsrange
         * - Trailing zeroes
         * - Redundante headers in tabs
         * - Meta-informatie (tags, categorie, SKU)
         * Altijd prijs van variatie tonen
         */
        add_filter( 'woocommerce_reset_variations_link', '__return_false' );
        add_filter( 'woocommerce_price_trim_zeros', '__return_true' );
        add_filter( 'woocommerce_product_description_heading', '__return_false' );
        add_filter( 'woocommerce_product_additional_information_heading', '__return_false' );
        remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_price', 10 );
        remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_meta', 40 );
        remove_action( 'woocommerce_before_single_product_summary', 'woocommerce_show_product_sale_flash', 10 );
        add_filter( 'woocommerce_show_variation_price', '__return_true' );
    }

    /**
     * Bepaalt of product bestelbaar is
     *
     * @param bool $is_purchasable
     * @param \WC_Product $product
     * @return bool
     */
    public function set_product_is_purchasable( bool $is_purchasable, \WC_Product $product )  {
        $is_purchasable = $product->is_visible();
        $status = $product->get_status();

        if ( ! $is_purchasable || Import_Product::REVIEW_STATUS == $status ) {
            
            remove_action( 'woocommerce_single_variation', 'kt_woocommerce_single_variation', 10 ); //TODO: kan weg na switch theme
            remove_action( 'woocommerce_single_variation', 'kt_woocommerce_single_variation_add_to_cart_button', 20 );
            
            remove_action( 'woocommerce_single_variation', 'woocommerce_single_variation', 10 );
            remove_action( 'woocommerce_single_variation', 'woocommerce_single_variation_add_to_cart_button', 20 );
            add_filter( 'woocommerce_variation_is_visible', '__return_false');
        }
        return $is_purchasable;
    }

    /**
     * Zet de toelichting voor het studententarief
     *
     * @param array $variations
     * @return array
     */
    public function set_variation_description( $variations ) {
        if ( 'student' == $variations['attributes']['attribute_pa_tarief'] ) {
            $variations['variation_description'] =  __( 'Je komt in aanmerking voor het studententarief als je 17 jaar of jonger bent of als je een bewijs van inschrijving kunt laten zien.', 'siw' );
        }
        return $variations;
    }

    /**
     * Zet de aanbiedingstekst
     *
     * @return string
     */
    public function set_sales_flash_text() {
        return '<span class="onsale">' . __( 'Korting', 'siw' ) . '</span>';
    }

    /**
     * Sorteert de attributes
     *
     * @param array $attributes
     * @return array
     */
    public function order_product_attributes( $attributes ) {
        $order = [
            'projectnaam',
            'projectcode',
            'pa_land',
            'pa_soort-werk',
            'startdatum',
            'einddatum',
            'aantal-vrijwilligers',
            'leeftijd',
            'lokale-bijdrage',
            'pa_taal',
            'pa_doelgroep',
        ];
        uksort( $attributes, function( $key1, $key2 ) use ( $order ) {
            return ( array_search( $key1, $order ) > array_search( $key2, $order ) );
        } );
        return $attributes;
    }
    
    /**
     * Zet het aantal related products op 4
     *
     * @param array $args
     * @return array
     */
    public function set_related_products_number( $args ) {
        $args['posts_per_page'] = 4;
        return $args;
    }

    /**
     * Toont lokale bijdrage indien van toepassing
     */
    public function show_local_fee() {
        global $product;
        $participation_fee = $product->get_meta( 'participation_fee' );
        $participation_fee_currency = $product->get_meta( 'participation_fee_currency' );

        if ( ! empty( $participation_fee_currency ) && $participation_fee > 0 ) {
            $currency = siw_get_currency( $participation_fee_currency );
            $symbol = $participation_fee_currency;
            if ( false !== $currency ) {
                $symbol = $currency->get_symbol();
                if ( 'EUR' != $participation_fee_currency ) {
                    $amount_in_euro = $currency->convert_to_euro( $participation_fee );
                }

            }
            ?>
            <div class="local-fee">
                <?php printf( esc_html__( 'Let op: naast het inschrijfgeld betaal je ter plekke nog een lokale bijdrage van %s %s.', 'siw' ), $symbol, $participation_fee );?>
                <?php if ( isset( $amount_in_euro ) ):?>
                    &nbsp;<?php printf ( esc_html__( '(Ca. &euro; %s)', 'siw' ), $amount_in_euro ); ?>
                <?php endif ?>
            </div>
            <?php
        }
    }
}
SIW API documentation generated by ApiGen