Показать / Скрыть содержимое в зависимости от количества активных участников от пользователя - PullRequest
2 голосов
/ 09 июня 2019

Используя шорткод, мне нужно показывать контент в зависимости от количества активных членств, которые есть у пользователя, независимо от того, в каком плане членства он участвует.

На самом деле я не знаком с PHP, но яобнаружил, что функция wc_memberships_get_user_memberships существует, поэтому подумал начать именно так.Но это в значительной степени мой предел:

add_shortcode('count-active-memberships', 'count_active_memberships');
function count_active_memberships(){
$user_id = get_current_user_id();

$args = array( 
    'status' = 'active'
);  

$active_memberships = count(wc_memberships_get_user_memberships( $user_id, $args ));
}

В конце это должно выглядеть так:

[count-active-memberships = "3"] Содержимое для участников с 3 активными членствами [/count-active-memberships]

Спасибо за вашу помощь

1 Ответ

0 голосов
/ 10 июня 2019

Когда вы регистрируете шорткод, ваша функция обратного вызова count_active_memberships() получает до 2 параметров:

  • Массив аргументов (параметры, передаваемые в шорткод) и
  • Содержимое внутри шорткода ([count-active-memberships] Это содержимое [/count-active-memberships]).

Если вы хотите отобразить только часть содержимогоесли текущий пользователь имеет 3 или более активных членства, вы можете сделать это:

add_shortcode('count-active-memberships', 'count_active_memberships');
function count_active_memberships($atts, $content = ''){
    $user_id = get_current_user_id();

    // The user is logged in, check memberships
    if ( $user_id ) {
        $args = array( 
            'status' => 'active'
        );
        $active_memberships = wc_memberships_get_user_memberships($user_id, $args);

        if ( is_array($active_memberships) && count($active_memberships) >= 3 ) {
            return $content;
        }
    }

    // User is either not logged in or doesn't have enough active memberships
    // so let's return an empty string.
    return '';
}

Теперь, если вы хотите, чтобы количество минимально необходимых членств настраивалось пользователем, вам нужно определитьновый атрибут (например, min_memberships) внутри функции, которая регистрирует шорткод.Например:

add_shortcode('count-active-memberships', 'count_active_memberships');
function count_active_memberships($atts, $content = ''){
    // Shortcode attributes
    $atts = shortcode_atts(array(
        'min_memberships' => 3
    ), $atts, 'count-active-memberships');

    // Let's make sure that the value passed by the user is a number
    if (
        ! is_numeric($atts['min_memberships']) 
        || $atts['min_memberships'] < 0
    ) {
        $atts['min_memberships'] = 3; // Fallback to minimum 3 memberships
    }

    $user_id = get_current_user_id();

    // The user is logged in, check memberships
    if ( $user_id ) {
        $args = array( 
            'status' => 'active'
        );
        $active_memberships = wc_memberships_get_user_memberships($user_id, $args);

        if (
            is_array($active_memberships) 
            && count($active_memberships) >= $atts['min_memberships']
        ) {
            return $content;
        }
    }

    // User is either not logged in or doesn't have enough active memberships
    // so let's return an empty string.
    return '';
}

Тогда вы сможете сделать что-то вроде этого:

[count-active-memberships min_memberships=5]
Content visible to users with 5 or more active memberships
[/count-active-memberships]
...