Вопрос или проблема
Я работаю с плагином WPForo и пытаюсь адаптировать этот скрипт, чтобы скрыть ссылки от посетителей
add_filter('wpforo_content_after', 'wpforo_hide_links_for_guests', 10);
function wpforo_hide_links_for_guests( $content ){
if( WPF()->current_user_groupid === 4 ){
$content = preg_replace('|<a[^>]+href=[^>]+>[^<>]+<\/a>|im', '<a href="#" rel="nofollow">[' . wpforo_phrase('Please login to see the link', false) . ']</a>', $content);
}
return $content;
}
Скрипт работает нормально, но проблема в том, что блокируются ссылки, которые не показываются гостям на всех форумах
Из этого кода нужно исключить два разных форума, чтобы показывать ссылки гостям.
например, так
else {
WPF()->current_forumid_key === 3,6 ){
$content = disable;
}
Я потерялся и не знаю, как добавить исключения, чтобы код не применялся только на двух разных форумах.
Этот код используется в файле functions.php темы.
Можете помочь мне?
Заранее спасибо
Ответ или решение
Конечно, я помогу вам разобраться в вашей задаче. Давайте подробно разберем ситуацию и предложим решение.
Теория
Ваша задача состоит в том, чтобы модифицировать уже работающий скрипт в WordPress плагине WPForo таким образом, чтобы он скрывал ссылки для гостей во всех форумах, за исключением двух определённых форумов. В текущем скрипте проверка на пользователя-гостя осуществляется через условие WPF()->current_user_groupid === 4
. Вы также хотите добавить условие, которое исключит два форума, на которых ссылки не будут скрываться для гостей, при этом все остальные оставив без изменений.
Пример
Мы рассматриваем такой кодовый блок:
add_filter('wpforo_content_after', 'wpforo_hide_links_for_guests', 10);
function wpforo_hide_links_for_guests( $content ){
if(WPF()->current_user_groupid === 4) {
$content = preg_replace('|<a[^>]+href=[^>]+>[^<]+<\/a>|im', '<a href="#" rel="nofollow">['.wpforo_phrase('Please login to see the link', false).']</a>', $content);
}
return $content;
}
Вам необходимо добавить проверку на ID форума, чтобы в случае, если форум имеет ID 3 или 6, скрипт не применялся.
Применение
Вы можете использовать дополнительное условие внутри существующего, чтобы проверить идентификатор текущего форума. Это достигается с помощью оператора &&
и функции проверки. Модифицированный код может выглядеть следующим образом:
add_filter('wpforo_content_after', 'wpforo_hide_links_for_guests', 10);
function wpforo_hide_links_for_guests( $content ){
// Идентификаторы форумов, которые должны быть исключены.
$excluded_forum_ids = array(3, 6);
// Проверяем, является ли пользователь гостем и форум не исключён.
if(WPF()->current_user_groupid === 4 && !in_array(WPF()->current_forumid_key, $excluded_forum_ids)) {
$content = preg_replace('|<a[^>]+href=[^>]+>[^<]+<\/a>|im', '<a href="#" rel="nofollow">['.wpforo_phrase('Please login to see the link', false).']</a>', $content);
}
return $content;
}
Заключение
С помощью функции in_array()
скрипт проверяет, находится ли текущий идентификатор форума в массиве исключенных. Если идентификатор не найден в этом массиве, тогда применение регулярного выражения для замены ссылки выполняется. Таким образом, ссылки сохраняются видимыми только на указанных форумах. Это решение должно соответствовать вашим требованиям и не блокировать ссылки именно в форумах с ID 3 и 6, предоставляя вам гибкость в управлении видимостью содержания форума для гостей.