На сайте WP есть такая функция, которая вставляет код (рекламу) после определенного абзаца в теле статьи.
function pb_ad_into_post($content){
if(is_single()){
$pb_post_advert = get_option( 'pb_post_advert' );
if(empty($pb_post_advert)){
return $content;
}
$pb_post_advert = html_entity_decode( $pb_post_advert, ENT_COMPAT );
$insertAfter = 3; //номер абзаца, после которого идет реклама
$closingP = '</p>';
$contentBlock = explode($closingP, $content);
foreach($contentBlock as $key => $con){
if(trim($con)) {
$contentBlock[$key] .= $closingP;
}
if(($key + 1) == $insertAfter){
$contentBlock[$key] .= $pb_post_advert;
}
}
$content = implode('', $contentBlock);
}
return $content;
}
add_filter('the_content', 'pb_ad_into_post');
Собственно номер абзаца указывается в строке $insertAfter = 3;. Мне нужно, чтобы эта цифра выходила из переменной, берущейся из настройки, например такой
$number = get_option( 'number' );
Вставляю по разному, не получается. Кто-нибудь знает как это сделать?
Проблема в том, что у вас не настроена опция скорее всего, так как возвращает "ничего", значит в БД не указана. Для примера я буду иметь в виду название опции abzac_ads
У вас есть три пути:
abzac_adsabzac_ads в БД, тоесть в таблице wp_options добавить строку с option_name = abzac_ads option_value = нужное нам числоdefine('CONF_ADS', 'нужное нам число');Самый адекватный способ и правильный, тот что первый. Он гибок, а создание страницы в админке(если не хотите редактировать плагин, так как есть шанс потерять изменения при обновлении) занимает минуту, добавление в functions.php например в тему, что используется.
Далее, использывать get_option('abzac_ads'); в нужном месте, но такой формат слегка не правильный, правильно получать так get_option('abzac_ads', 3);, так как в случае, если опцию не находит Вам по умолчанию вернет число 3, которое можно заменить на любое другое, если опцию не нашло или возникли ошибки, в этом случае реклама будет работать всегда.
Если же Вы решили делать третьим и найболее неправильным методом, то для получения пареметра просто пишем в функции вместо числа абзаца CONF_ADS, который мы определили ранее. В даном методе минус в том, что вам всегда нужно будет для смены абзаца редактировать файл, что очень плохо и с таким успехом можно редактировать те же число вручную.
P.S.
Вообще, я бы создал метаполе для постов, например "Куда поставить рекламу"(ключ например kuda_rekamu), и при фильтре контента, Вашей функции передавал бы параметр дополнительно с id поста, для точго, чтоб в функции, которая вызывается при фильтре, можно было использывать конструкцию вместо получения опции, получения метаключа от поста, тоесть get_post_meta($id,'kuda_rekamu,true');, определить дополнительно значение по-умолчанию 3й абзац, а если ключ указан то использывать значения ключа. В таком случае, для разных постов будет возможность ставить рекламу в разные места, например для поста 1 поставил рекламу после 10го абзаца, для поста 2 поставил рекламу после 5го, а для поста 3 не указал, и ему по умолчанию поставило рекламу после 3го абзаца.
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости