To, že SimpleShop umí skrývat obsah pro členské sekce přímo ve WordPress, to ví každý (kdo s ním pracuje). A to, že v DIVI (a dalších builderech) není tahle možnosti k dispozici… ví bohužel taky každý.
SimpleShop sám o sobě má tuto integraci pouze do Gutenbergu (tj. že můžete nastavit, který blok bude viditelný pro konkrétní členskou sekci). I tak existuje v případě DIVI (a dalších builderů) relativně jednoduchá cesta, jak tento problém vyřešit – na základě existence cookies (tj. resp. zobrazování obsahu podle cookies).
Princip fungování a omezení:
- funguje to pro libovolný stavební blok DIVI (sekce, řádek, sloupec, modul),
- do webu musí být vložen kód, který je na konci této stránky – do child theme nebo do pluginu na snippety,
- řešení funguje na bázi technických cookies
- zkontroluje, zda je uživatel přihlášen do webu a pokud ano, nastaví SS skupiny do cookies
- pokud přihlášen není, SS cookies odebere,
- pokud má uživatel skupin víc, každá skupina má svoje separátní cookie,
- v tomto řešení není k dispozici funkce postupného odkrývání obsahu (tj. říci, za jak dlouho od zakoupení členské sekce se má obsah zobrazit).
- testováno s DIVI 4.20.x (kód by měl být přepoužitelný i pro další buildery, pokud umí zobrazit stavební bloky podle hodnoty v cookies).
- testováno na PHP 7.4+

Postup
1. vložte do webu PHP kód
(najdete ho na konci stránky)
2. najděte SSC ID SimpleShop Skupiny
WP menu -> SimpleShop -> Skupiny -> údaj ze sloupce SSC ID

3. Z těchto ID si vytvořte názvy cookies pro DIVI podmínky
Cookie má vždy tvar ss_group_x, kde x je SSC ID skupiny z bodu 2.
- v tomto testovacím případě je to ss_group_453 a ss_group_454.
4. Název cookie pak dejte do podmínky v DIVI stavebním bloku (Pokročilé -> Podmínky):

PHP Kód
Tento kód vložte do child theme nebo do pluginu na snippety.
Kód v. 2 (děkuji za úpravu od Adama Kotaly)
<?php
function process_ss_groups_to_cookies()
{
unset_ss_cookies();
if (is_user_logged_in()) {
global $wpdb;
$user_id = intval(get_current_user_id()); //sanitizing input
$query = $wpdb->prepare('SELECT * FROM `' . $wpdb->prefix . 'usermeta` WHERE user_id=%d AND meta_key = "_ssc_user_groups"', $user_id);
$result = $wpdb->get_results($query);
if ($result !== false && sizeof($result) > 0) {
$ss_groups = @unserialize($result[0]->meta_value);
if ($ss_groups !== false) {
foreach ($ss_groups as $ss_group) {
set_ss_group_cookie("ss_group_" . $ss_group);
}
}
}
}
}
function set_ss_group_cookie($cookie_name)
{
if (!isset($_COOKIE[$cookie_name])) {
setcookie($cookie_name, $cookie_name, time() + 31556926, "/");
$_COOKIE[$cookie_name] = $cookie_name; // Updating the _COOKIE superglobal immediately
}
}
function unset_ss_cookies()
{
foreach ($_COOKIE as $c_name => $c_value) {
if (strpos($c_name, "ss_group_") === 0) {
setcookie($c_name, '', time() - 3600, '/'); // Destroy the cookie
unset($_COOKIE[$c_name]); // Unset the superglobal variable
}
}
}
//call it when render any page to (un)set cookies properly
add_action('wp', 'process_ss_groups_to_cookies');
Pozn. autora: Další možnost je využití DIVI podmínek a uživatelských rolí. Podle SS členské sekce, kterou má uživatel k dispozici, by se mu přiřadila role a v DIVI by se pak nastavovaly podmínky podle role.

