Число из переменной

226
23 февраля 2018, 19:06

На сайте 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' );

Вставляю по разному, не получается. Кто-нибудь знает как это сделать?

Answer 1

Проблема в том, что у вас не настроена опция скорее всего, так как возвращает "ничего", значит в БД не указана. Для примера я буду иметь в виду название опции abzac_ads У вас есть три пути:

  • Дописать настройку опции к плагину для админ-панели, чтоб в БД не лазить каждый раз, которая будет сохранять данные с установленого поля в abzac_ads
  • Вручную создать опцию abzac_ads в БД, тоесть в таблице wp_options добавить строку с option_name = abzac_ads option_value = нужное нам число
  • Добавить в wp-config.php(лутше не надо) или в тему, что используете 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го абзаца.

READ ALSO
Установить config heroku через PHP

Установить config heroku через PHP

Kак установить config heroku через PHPЯ знаю что можно сделать это через командную строку вот так: heroku config:set GITHUB_USERNAME=joesmith

222
Кеширование изменяемых изображений

Кеширование изменяемых изображений

Всем привет! Как в yii можно кешировать изображения? Сейчас у меня все изображения берутся прямо из папки uploads, они отлично кешируются средствами...

189
Как снизить нагрузку на скрипт при подключении среды WordPress?

Как снизить нагрузку на скрипт при подключении среды WordPress?

Имеется cron php скрипт, который выполняет некоторые операции с БДВ этом скрипте я использую такие wp функции, как wp_insert_term(), wp_insert_post(),wp_cache_flush()...

176
Почему не работает $_POST?

Почему не работает $_POST?

Почему-то перестал работать $_POST со стороны обработчика,GET тоже не работает, ajax отправляет, но не доходит до php файлаОтправляю из файла "index

182