// Obniżenie ceny o 10%, jeżeli dany produkt jeszcze nie jest na wyprzedaży
function my_get_sale_price($sale_price, $product) {
    if(empty($sale_price)) {
        $sale_price = $product->get_regular_price() * .9;
        $product->set_price($sale_price);
    }
    return $sale_price;
}
dd_filter('woocommerce_product_get_sale_price', 'my_get_sale_price',
  10, 2);
add_filter('woocommerce_product_variation_get_sale_price',
  'my_get_sale_price', 10, 2);



function autocomplete_virtual_orders($order_id) {
    // Pobranie istniejącego zamówienia
    $order = new WC_Order($order_id);

    // Przyjęcie założenia, że zostanie automatycznie uzupełnione
    $autocomplete = true;

    // Pobranie elementów
    if (count( $order->get_items() ) > 0) {
        foreach ($order->get_items() as $item) {
            if($item['type'] == 'line_item') {
                $_product = $order->get_product_from_item( $item );
                if(!$_product->is_virtual()) {
                    // W koszyku został znaleziony produkt, który nie jest wirtualny
                    $autocomplete = false;
                    break;
                }
            }
        }
    }

    // Zmiana stanu zamówienia, gdy jest to niezbędne
    if(!empty($autocomplete)) {
        $order->update_status('completed', 'Autocompleted.');
    }
}
add_filter('woocommerce_thankyou', 'autocomplete_virtual_orders');



// Ograniczenie dostępu do strony, jeśli użytkownik nie wykupił możliwości pobrania określonego pliku
function my_template_redirect_check_edd()
{
    global $current_user;

    // Określenie slugu chronionej strony
    $protected_page_slug = 'customers-only';

    // Zdefiniowanie identyfikatora pobrania, pod kątem którego będzie przeprowadzone sprawdzenie
    $required_download_id = 184;

    // Chroniona jest tylko jedna, konkretna strona
    if(!is_page($protected_page_slug))
        return;

    // Przekierowanie w przypadku braku użytkownika lub niezakupienia produktu
    if(!is_user_logged_in() ||
            !edd_has_user_purchased($current_user->ID, $required_download_id)) {
        wp_redirect(get_permalink($required_download_id));
        exit;
    }
}
add_action('template_redirect', 'my_template_redirect_check_edd');



// Funkcja pomocnicza, która sprawdza, czy użytkownik jest klientem
function is_plugin_customer($user_id = null)
{
    $plugin_download_id = 184;      // Uaktualnij to polecenie
    // Domyślnie to jest bieżący użytkownik
    if(empty($user_id))
    {
        global $current_user;
        $user_id = $current_user->ID;
    }
    return edd_has_user_purchased($user_id, $plugin_download_id);
}

// Dodanie do menu podstawowego łącza prowadzącego do pomocy technicznej. To jest łącze tylko dla klientów
function add_support_link_to_menu($items, $args)
{
    if($args->theme_location == 'primary' && is_plugin_customer())
    {
        $items .= '<li class="menu-item menu-item-type-post_type
                menu-item-object-page menu-item-support">';
        $items .= '<a href="/support/">Pomoc techniczna</a>';
        $items .= '</li>';
    }
    return $items;
}
add_filter('wp_nav_menu_items', 'add_support_link_to_menu', 10, 2);



// Blokowanie dostępu do stron dla członków grupy
function my_buddy_press_members_group()
{
    $uri = $_SERVER['REQUEST_URI'];
    if(strtolower(substr($uri, 0, 16)) == "/groups/members/")
    {
        // Upewnienie się, że mamy do czynienia z członkiem grupy
        if(!pmpro_hasMembershipLevel())
        {
            wp_redirect(pmpro_url("levels"));
            exit;
        }
    }
}
add_action("init", "my_buddy_press_members_group");



if(pmpro_hasMembershipLevel(array(1,2)))
{
    // Pewne operacje na poziomach członkostwa 1 i 2
}



<?php if(is_user_logged_in()) { ?>
<div class="user-welcome">
  Witamy
<?php if(function_exists("pmpro_hasMembershipLevel")
&& pmpro_hasMembershipLevel()) { ?>
        <a href="<?php echo pmpro_url("account"); ?>">
<?php echo $current_user->display_name;?>
    </a>
<?php } else { ?>
        <a href="<?php echo home_url("/wp-admin/profile.php"); ?>">
<?php echo $current_user->display_name;?>
    </a>
<?php } ?>
</div> <!-- Koniec sekcji user-welcome -->
<?php } ?>



function my_template_redirect()
{
    $okay_pages = array(
        pmpro_getOption('billing_page_id'),
        pmpro_getOption('account_page_id'),
        pmpro_getOption('levels_page_id'),
        pmpro_getOption('checkout_page_id'),
        pmpro_getOption('confirmation_page_id')
    );

    // Niezarejestrowany użytkownik powinien zostać przekierowany na stronę główną witryny
    if(!is_user_logged_in()
        && !is_home()
        && !is_page($okay_pages)
        && !strpos($_SERVER['REQUEST_URI'], "login"))
    {
        wp_redirect(home_url('wp-login.php?redirect_to='.
            urlencode($_SERVER['REQUEST_URI'])));
    }
    elseif(is_page()
        && !is_home()
        && !is_page($okay_pages)
        && !pmpro_hasMembershipLevel()
    {
        wp_redirect(home_url());
    }
}
add_action('template_redirect', 'my_template_redirect');



RewriteEngine On
RewriteBase /
RewriteRule ^wp-content/uploads/(.*)$ \
    /wp-content/plugins/paid-memberships-pro/services/getfile.php [L]



function my_pmpro_after_change_membership_level($level_id, $user_id)
{
    if($level_id == 1)
    {
        // Nowy członek na poziomie 1
        // Jeżeli jest w roli subscriber, powinien otrzymać rolę author
        $wp_user_object = new WP_User($user_id);
        if(in_array('subscriber', $wp_user_object->roles))
            $wp_user_object->set_role('author');
    }
    else
    {
        // To nie jest poziom członkostwa 1
        // Jeżeli jest w roli author, powinien otrzymać rolę subscriber
        $wp_user_object = new WP_User($user_id);
        if(in_array('author', $wp_user_object->roles))
            $wp_user_object->set_role('subscriber');
    }
}
add_action(
    'pmpro_after_change_membership_level',
    'my_pmpro_after_change_membership_level',
    10,
    2
);



/*
    Zmiana kraju domyślnego z USA na PL (Polska)
*/
function my_pmpro_default_country($default)
{
    return 'PL';
}
add_filter('pmpro_default_country', 'my_pmpro_default_country');
/*
        Usunięcie i dodanie pewnych krajów na liście domyślnej
*/
function my_pmpro_countries($countries)
{
    // Usunięcie USA
    unset($countries['US']);
    // Dodanie Księżyca (KS to skrót od słowa księżyc)
    $countries['KS'] = 'Księżyc';
    // Tablicę krajów można utworzyć od zera
    //$countries = array('CA' => 'Kanada', 'GB' => 'Wielka Brytania',
    // 'PL' => 'Polska');
    return $countries;
}
add_filter('pmpro_countries', 'my_pmpro_countries');
/*
        (Opcjonalnie) Określone kraje można usunąć z listy lub dopisać je na nią
    Na to pozwala filtr pmpro_countries
        Tablica jest sformatowana w następującej postaci:
    array('PL'=>'Polska', 'GB'=>'Wielka Brytania');
    w której skrót jest kluczem, wartością natomiast
        jest nazwa kraju
*/
function my_pmpro_countries($countries)
{
    // Usunięcie USA
    unset($countries['US']);
    // Dodanie Księżyca (KS to skrót od słowa księżyc)
    $countries['KS'] = 'Księżyc';
    // Tablicę krajów można utworzyć od zera
    //$countries = array('CA' => 'Kanada', 'GB' => 'Wielka Brytania',
    // 'PL' => 'Polska');
    return $countries;
}
add_filter('pmpro_countries', 'my_pmpro_countries');
/*
        Zmiana pól płatnika może nie być wymagana
        Domyślne pola to: bfirstname, blastname, baddress1, bcity, bstate,
    bzipcode, bphone, bemail, bcountry, CardType, AccountNumber,
    ExpirationMonth, ExpirationYear i CVV
*/
function my_pmpro_required_billing_fields($fields)
{
    // Usunięcie pól nazwy stanu i kodu pocztowego
    unset($fields['bstate']);
    unset($fields['bzipcode']);
    return $fields;
}
add_filter('pmpro_required_billing_fields', 'my_pmpro_required_billing_fields');
