• Доброго времени суток, хочу сделать на сайте кнопку (написанную на странице в области «текст» (для кода) можно ли так вообще?), которая при нажатии будет «обновлять» какие-то записи в бд (есть таблица, в которой чтобы «поднять» строчку на 1 позицию, её нужно обновить). Такой вопрос, можно ли писать php коды на «текстовой» (кодовой) части страницы содержания, также совместно с SQL? Я пытался создать что-то подобно, но не вышло. Возможно ли такое, если да, то как правильно это сделать, если нет, то какие альтернативные варианты можно придумать?

Просмотр 14 ответов — с 16 по 29 (всего 29)
  • Про $wpdb я знаю, прочитал достаточно много документации про нее, но у меня «какая-то» ошибка, проблема в том, что какой код не напишу (пробовал кучу разный запросов, и тех, что «тестовые»), то выводит пустоту, будто чисто пробел вставил и жду от него чудо :

    
    [exec]
    $number_of_users = $wpdb->get_var(
    		"SELECT COUNT(*) FROM $wpdb->users;"
    );
    echo "Всего на сайте зарегалось {$number_of_users} человек."
    [/exec]
    

    Любой запрос просто пустота

    Модератор Юрій

    (@yube)

    Обратите внимание на слово «глобальный». Без объявления global его внутри функций не видно.

    [exec]
    
    global $wpdb;
    $number_of_users =$wpdb->get_var(
    "SELECT COUNT(*) FROM $wpdb->users;"
    );
    echo "Всего на сайте зарегалось {$number_of_users} человек."
    [/exec]

    Всё равно пустота

    Модератор Юрій

    (@yube)

    Всё равно пустота

    В шаблоне этот код работает, поэтому все вопросы к неведомому [exec]у.

    Читал, что если вставить этот код в тему

    
     function exec_php($matches){
        eval('ob_start();'.$matches[1].'$inline_execute_output = ob_get_contents();ob_end_clean();');
        return $inline_execute_output;
    }
    function inline_php($content){
        $content = preg_replace_callback('/\[exec\]((.|\n)*?)\[\/exec\]/', 'exec_php', $content);
        $content = preg_replace('/\[exec off\]((.|\n)*?)\[\/exec\]/', '$1', $content);
        return $content;
    }
    add_filter('the_content', 'inline_php', 0);
    

    то страница начнет понимать php, а[exec] вместо <?php используется. Так же я пробовал этот код в плагине PHP Code Snippets, без [exec], но всё равно пустота

    • Ответ изменён 6 лет, 6 месяцев назад пользователем vipman.
    • Ответ изменён 6 лет, 6 месяцев назад пользователем vipman.
    • Ответ изменён 6 лет, 6 месяцев назад пользователем vipman.
    • Ответ изменён 6 лет, 6 месяцев назад пользователем vipman.
    • Ответ изменён 6 лет, 6 месяцев назад пользователем vipman.
    Модератор Юрій

    (@yube)

    если вставить этот код в тему

    … можно сделать дыру в безопасности сайта.
    Как и любым другим способом, позволяющим выполнить произвольный php-код из контента записи/страницы.

    Код должен быть в обработчике шорткода, причем код, так сказать, стационарный, который написали Вы и точно знаете, что он делает. Например, так:

    add_shortcode('users_registered', function() {
    	global $wpdb;
    	$number_of_users = $wpdb->get_var(
    		"SELECT COUNT(*) FROM $wpdb->users"
    	);
    	return "Всего на сайте зарегалось {$number_of_users} человек.";
    });
    

    И в контент страницы в нужном месте вставить [users_registered].

    Хмм, извиняюсь, а где писать этот код, чтобы потом его вывести шортокодом? в index-e темы?

    Модератор Юрій

    (@yube)

    А куда, простите, Вы помещали код с ‘inline_php’?

    Обычно рекомендуют такие сниппеты размещать в functions.php Темы (дочерней, разумеется). Но лучше оформить отдельным плагином. Такой плагин со кастомынми функциями (есть уже готовые плагины-заготовки) позволит менять Темы, не беспокоясь о том, что потеряется функционал.

    А куда, простите, Вы помещали код с ‘inline_php’? — в functions.php
    Так, хорошо, в functions.php работает, но вопрос с кнопкой тогда как решить? я думал, что на html создать кнопку и к ней функционал добавить, но чтобы сделать так, чтобы при нажатии на кнопку выполнялось действие шорткода…?

    Модератор Юрій

    (@yube)

    Я вообще не понимаю, зачем тут шорткод. Сделайте нормальную аяксуню кнопку, как описано тут https://codex.wordpress.org/AJAX_in_Plugins (вторая часть, про фронт-энд).

    Хотя, если кнопка должна/может быть в разных местах на разных страницах, то имеет смысл оформить html кнопки шорткодом. Заодно и проверку «показывать — не показывать» туда можно добавить.

    Я вообще не понимаю, зачем тут шорткод — если php код не работает на странице, а только в функционале темы, а чтобы вывести его действия нужен шорткод, то вот зачем…
    Сделайте нормальную аяксуню кнопку, как описано тут https://codex.wordpress.org/AJAX_in_Plugins не вижу здесь ничего про кнопки) делать целый плагин ради 1 кнопки, хмм
    просто обычная кнопочка на html, которая выполняет update в «timestamp»

    Модератор Юрій

    (@yube)

    делать целый плагин ради 1 кнопки, хмм

    Дело хозяйское. Удачи!

    И да, code — для кода, b-quote — для цитирования.

    И да, code — для кода, b-quote — для цитирования.

    не вижу разницы в отображении)

    Пока не особо разбираюсь в $wpbd, подскажите, что не правильно и можно ли так вообще?

    global $wpdb;
    	$raice = $wpdb->update(		
       "SELECT COUNT(*) FROM $wpdb->participants_database $table wp_participants_database, $data date_recorded = ‘CURRENT_TIMESTAMP’, $where Наименование = $display_name"
    		);	
    	});
Просмотр 14 ответов — с 16 по 29 (всего 29)
  • Тема «Кнопка, которая выполняет «действия» в бд» закрыта для новых ответов.