Сделать активным php код, выводимый через админку (Вордпресс)

xoxol4uk22
На сайте с 14.11.2017
Offline
66
630

Думаю, решение небыстрое и вряд ли кто поможет, но все же... Нужно, чтобы php код, выводимый через админку Вордпресса (поля для вывода рекламы в шаблоне), на страницы сайта не экранировался, а выполнялся. Мне нужно, чтобы выполнялась функция <?php echo wp_create_nonce(); ?>, которая при вставке прямо в шаблон работает нормально и выводит текст.

Например, по умолчанию в тексте виджета функции php также не работают, а выводятся в виде текста. Но после добавления вот такой функции в function.php они начинаются выполнятся:

//Пример, как аналогичная проблема решается в виджетах
function mayak_widget_php($widget_content) {
if (strpos($widget_content, '<' . '?') !== false)
ob_start();
eval('?' . '>' . $widget_content);
$widget_content = ob_get_contents();
ob_end_clean();
}
return $widget_content;
}
add_filter('widget_text', 'mayak_widget_php', 99);

У меня через админку в шаблоне выводятся блоки рекламы (перед статьей, посредине и т.п.). Но вот здесь та же проблема, как и по умолчанию с виджетами – php код с этих полей не выполняется, а экранируется.

Код вывода этих блоков выглядит вот так:

 //Пример, вывода рекламы по средине статьи, где мне нужно сделать код php активным

if ( $i == $middle_p ) {

if ( $open_tag ) {
$middle_p++;
} else {

$show_ad = do_show_ad(
$post->ID,
isset( $ad_options['r_middle_article_exclude'] ) ? $ad_options['r_middle_article_exclude'] : array(),
isset( $ad_options['r_middle_article_include'] ) ? $ad_options['r_middle_article_include'] : array()
);

}

}

Вопрос. Можно как-то изменить или дополнить ф-ию для активации php в виджетах, чтобы и вот таком выводе рекламы это тоже работало? Я от этого далекий, то только пробовал заменить хук widget_tex на ad_options, но это просто пальцем в небо(((

Gerga
На сайте с 02.08.2015
Offline
94
#1

xoxol4uk22, для таких случаев есть шорткоды, все остальное - это костыли.

MrDesigner
На сайте с 31.01.2008
Offline
205
#2

Вопрос поставлен неправильно. Вам нужно выполнение php-кода в виджете?

Попробуйте Classic Text Widget: https://ru.wordpress.org/plugins/classic-text-widget/

Does the plugin directly execute PHP?

No, it does not directly support executing PHP. The widget does support shortcodes however. If you want to execute PHP in this widget, write your code as a shortcode and it will run.

И тут почитайте: http://kostyakhmelev.ru/texnicheskaya-chast/php-v-vidzhete-wordpress.html

xoxol4uk22
На сайте с 14.11.2017
Offline
66
#3
MrDesigner:
Вопрос поставлен неправильно. Вам нужно выполнение php-кода в виджете?

Нет, я привел пример, как вывести php код в виджете.

А мне на самом деле нужно решить подобную проблему, только не в виджете, а есть у меня поля для вывода рекламы в админке.

---------- Добавлено 01.08.2019 в 14:03 ----------

Gerga:
xoxol4uk22, для таких случаев есть шорткоды, все остальное - это костыли.

Сейчас попробую. Спасибо.

---------- Добавлено 01.08.2019 в 14:29 ----------

Gerga:
xoxol4uk22, для таких случаев есть шорткоды, все остальное - это костыли.

Попробовал. Так тоже не получится. Шорткоды по умолчанию не выводятся нигде, кроме тела статьи (текстового редактора). Поэтому все равно требуется функция, которая делает шорткоды активными при выводе из необходимых мне полей (для рекламы). В виджете это решается простым фильтром add_filter('widget_text','do_shortcode'); . Но в моем случае я непонимаю, какой хук применить вместо widget_text (((

Gerga
На сайте с 02.08.2015
Offline
94
#4
xoxol4uk22:
add_filter('widget_text','do_shortcode');

Вам не нужен этот фильтр, используйте виджет "Текст" http://joxi.ru/bmogvDji3vLPYm.

---------- Добавлено 01.08.2019 в 16:47 ----------

Или сделайте свой виджет. В общем ваша задача решается максимум за 20 минут специалистом по wp .

xoxol4uk22
На сайте с 14.11.2017
Offline
66
#5
Gerga:
Вам не нужен этот фильтр, используйте виджет "Текст" http://joxi.ru/bmogvDji3vLPYm.

---------- Добавлено 01.08.2019 в 16:47 ----------

Или сделайте свой виджет. В общем ваша задача решается максимум за 20 минут специалистом по wp .

Спасибо. Но я же говорю, у меня нет проблем с выводом шорткода в виджете. Там все нормально,

У меня шорткод не выводитяс вот в этих полях (это функционал шаблона):

Gerga
На сайте с 02.08.2015
Offline
94
#6
xoxol4uk22:
У меня шорткод не выводитяс вот в этих полях (это функционал шаблона):

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

xoxol4uk22
На сайте с 14.11.2017
Offline
66
#7
Gerga:
если вы хотите вывести значение шорткод в этих полях, значит вы тут что-то не правильно поняли. Шорткодом вы можете выполнить вывод значений из этих полей.

Я тоже сразу так думал... Создал шорткод, вставляю его в редактор записи – работает, вставляю сюда – не работает((( Хотя выводил его по средине статьи через соответствующий блок для рекламы.

Написал разработчкиу шаблона (вечная поддержка у меня), то он тоже говорит, как так не работает... Я ему показал пример, то он пошел смотреть и уже несколько часов молчит. Ну может и рабочий день закончился...

В итоге пока шорктод из этих полей выводится в таком виде, как я прописал, а не заменяется((

Gerga
На сайте с 02.08.2015
Offline
94
#8

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


<?php
echo do_shortcode($advert);
?>

где $advert содержит код из рекламных полей.

---------- Добавлено 01.08.2019 в 20:20 ----------

можете скинуть код функции вывода рекламы, а я туда вставлю do_shortcode.

xoxol4uk22
На сайте с 14.11.2017
Offline
66
#9
Gerga:
можете скинуть код функции вывода рекламы, а я туда вставлю do_shortcode.

Если Вас не затруднит, то вроде вот в этом файле все:

https://yadi.sk/d/dlk-7l6FRlQM-Q

---------- Добавлено 01.08.2019 в 19:56 ----------

А то я вижу, что Вы правильно подсказали на счет do_shortcode, но применить ума не хватает, что только не пробовал))

---------- Добавлено 01.08.2019 в 19:57 ----------

Вот так у меня создан шорткод:

add_shortcode( 'nonce', function() {
return wp_create_nonce();
} );
xoxol4uk22
На сайте с 14.11.2017
Offline
66
#10

Проблему решил. Оказывается, шорткод в этих полях для вывода рекламы работал. Но он не работал внутри рекламного блока. Поздно я это заметил((

В итоге решил проблему созданием шорткода с целым рекламным блоком, и тогда просто вывел его в блоке рекламы.

Да, это примитивное решение, но рабочее))

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий