WordPress как на ладони

Как передать checked установленный jQury в php и сохранить в переменной?

Как передать checked установленный jQury в php и сохранить в переменной
Есть плагин, на его странице есть две div кнопки (а и b) и две скрытые радиокнопки (а и b). Нужно чтобы при нажатии div кнопки "а" отмечалась радиокнопка "а" и в переменную "active" сохранялось значение "а". Тоже самое и для "b".
Условия:
При нажатии на div кнопку "a" или "b" срабатывает js, который устанавливает для радиокнопки "а" или "b" соответственно, "checked" или иное. И при этом в php в переменной "active" должно сохраняться значение "a" или "b" при нажатии на кнопку "Сохранить".
Подскажите пожалуйста как реализовать передачу данных из JS со стороны клиента в PHP на стороне сервера.

/* СТРАНИЦА ПЛАГИНА */
add_action('admin_menu', 'plugin_page');
function plugin_page() {
	$page = add_menu_page('Плагин','plugin.php','manage_options','page','form');
	add_action('admin_print_scripts-'.$page,'js');
}
function js() {
	wp_register_script('script',plugin_dir_url(__FILE__).'js.js',array('jquery'));
	wp_enqueue_script('script');
}
add_action('admin_init','bsc_header_init');
function bsc_header_init(){
	register_setting('page_options','bscHO','');
}

function form() { // страница плагина
?>
<form method="post" action="options.php" onkeypress="if(event.keyCode == 13) return false;">
	<? settings_fields('page_options'); ?>
	<? $ho = get_option('bscHO'); ?>

		<div class="button" style="width:100px;height:40px;background:#000;color:#fff;cursor:pointer;">
			<p>BUTTON-а</p>
			<input type="radio" name="bscHO[active]" value="a" <?checked('a',$ho['active']);?> style="display:none;" class="radiobutton"/>
		</div>

		<div class="button" style="width:100px;height:40px;background:#000;color:#fff;cursor:pointer;">
			<p>BUTTON-b</p>
			<input type="radio" name="bscHO[active]" value="b" <?checked('b',$ho['active']);?> style="display:none;" class="radiobutton"/>
		</div>

		<?=$ho['active']; // вывод значения сохранённой переменной 'active'?>

		<input type="submit" value="<? _e('Save') ?>" >
</form>
<?
}
/* JQUERY */
jQuery(document).ready(function() {
	var button = jQuery('.button');
	for (var i = 0; i < button.length; i++) {
		jQuery(button[i]).on('click', function() {
			jQuery(this).children('.radiobutton').attr('checked','checked');
		});
	}
});
0
svetoslavluchezarniy
5.5 лет назад 6
  • 0
    el-lable620 el-lable.ru

    По идее нужно вместо div использовать label, по нажатию по нему будет внутри него отрабатывать смена значения чекбокса или радиобутона. И тогда вам не нужен JS.

    <label>
    	<input type="radio">
    </label>
    svetoslavluchezarniy 5.5 лет назад

    Спасибо за ответ, у меня так и было сделано. Но хочется реализовать именно c таким условием как в вопросе, т.к. есть ещё много моментов связанных с подобным, не только с радиокнопками smile

    el-lable 5.5 лет назад

    Ну рас вы любитель извращений, тогда так:

    /* JQUERY */
    jQuery(function($){
    	$('.button').click(function(){
    		$(this).find('[type="radio"]:first').click();
    	});
    });
    svetoslavluchezarniy 5.5 лет назад

    :):)smile спасибо конечно, но таких способов кучу можно наваять. Вы наверное не поняли сути "Условия" smile. Дело в том, что я хочу, чтобы JS отследил кнопку, по которой нажали. Далее JS будет менять стили. Я хочу, чтобы к дополнению к этому JS передал данные, например строку в php таким образом, чтобы уже в php можно было сохранить эту строку в переменной, а далее в базе данных после нажатия кнопки "submit", после чего страница перезагружается smile Сложность заключается в том, что JS выполняется на стороне клиента, а PHP на стороне сервера. Для этого сделали API на сколько я понимаю, а именно AJAX, только я в него не въезжаю пока. Может есть способ реализовать поставленную задачу без AJAX или как-то попроще c AJAX. Я смотрел уроки Тимура, но не понял как мне сделать, что я хочу sad

    el-lable 5.5 лет назад

    Это вам надо читать мануалы по созданию плагинов, либо обратиться к специалисту.

    Комментировать
  • 0

    У вас есть форма с разными input. У input есть "name" и "value". После нажатия на кнопку Submit ваша форма с данными улетела на сервер. В php проверяете $_REQUEST, там будут лежать ваши данные с именем "name" и значением "value". Дальше вы их пишете в базу и страница перезагружается. Ajax делает тоже самое, только без перезагрузки страницы.

    Для передачи строки создайте дополнительное поле hidden. Если чекбокс нажат, добавляйте строку в "value", если нет, очищайте.

    https://www.youtube.com/watch?v=a51CmL3omEA
    https://www.youtube.com/watch?v=gJLnuO0j1ho
    http://php.net/manual/ru/reserved.variables.request.php
    https://wp-kama.ru/id_2018/ajax-v-wordpress.html

    svetoslavluchezarniy 5.5 лет назад

    О smile спасибо! Буду пробовать!

    Комментировать
На вопросы могут отвечать только зарегистрированные пользователи. Вход . Регистрация