Поддержка WooCommerce Изменить глобальную переменную скриптом

  • Решено tolyan59

    (@tolyan59)


    Здравствуйте!

    Могу я в отражённом ниже коде вместо alert( ‘чекбокс включён’ ); и alert( ‘чекбокс выключён’ ); вставить конструкцию меняющую глобальную переменную $MY_VARIABLE_FOR_SHOW_WIDGET_FILTER на значение 1 или 0 соответственно и обновляющую страницу? Если нет, то буду рад подсказке других вариантов.

    add_action( 'storefront_sidebar', function () {
    
    global $MY_VARIABLE_FOR_SHOW_WIDGET_FILTER;
    
    ?>
    	<?php if (empty($MY_VARIABLE_FOR_SHOW_WIDGET_FILTER)): ?>
    		<input 
    			class="custom-checkbox"
    			id="myCheckbox"
    			type="checkbox">
    	<?php else: ?>
    		<input 
    			class="custom-checkbox"
    			id="myCheckbox"
    			type="checkbox"
    			checked="checked">
    	<?php endif; ?>
    	<label for="myCheckbox"> Хочу видеть фильтры <p> <?php // echo $MY_VARIABLE_FOR_SHOW_WIDGET_FILTER ?>
    	</label>
    
    	<script>
    	var c = document.querySelector('#myCheckbox');
    	c.onclick = function()
    	{
    	 if (c.checked) {
    	  alert( 'чекбокс включён' );
    	 } else {
    	  alert( 'чекбокс выключён' );
    	 }
    	}
    	</script>
    
    <?php 
    });

    Страница, с которой нужна помощь: [войдите, чтобы увидеть ссылку]

Просмотр 6 ответов — с 1 по 6 (всего 6)
  • Можете… а каков физический смысл сего действия?

    Автор tolyan59

    (@tolyan59)

    Смысл в том что-бы пользователь сам решал видеть ему фильтры или нет.

    В wp-config я задал глобальную переменную $MY_VARIABLE_FOR_SHOW_WIDGET_FILTER = 0 менять её должен пользователь. И в зависимости от тгого хочет он видеть фильтры или нет (стоит галка в checkboxe или нет) и ещё от некоторых обстоятельств фильтры будут видны или нет. Сниппет отражающий или нет фильтры ниже.

    add_action( 'woocommerce_archive_description', function () { 
    	
    global $MY_VARIABLE_FOR_SHOW_WIDGET_FILTER;
    
    ?>
    
    <?php if (empty($MY_VARIABLE_FOR_SHOW_WIDGET_FILTER)): ?>
    	<style> body .widget_premmerce_filter_filter_widget {display: none;} </style
    <?php else: ?>
    	<style> 
    	body .widget_premmerce_filter_filter_widget {display: block;}
    	
          body.tax-product_cat.term-electronics                                   .widget_premmerce_filter_filter_widget {display: none;}
    		body.tax-product_cat.term-tvs-plus                                      .widget_premmerce_filter_filter_widget {display: none;}
     		body.tax-product_cat.term-smartphones-plus                              .widget_premmerce_filter_filter_widget {display: none;}
            body.tax-product_cat.term-laptops-and-tablets                           .widget_premmerce_filter_filter_widget {display: none;}
    		body.tax-product_cat.term-computers-and-accessories                     .widget_premmerce_filter_filter_widget {display: none;}
            body.tax-product_cat.term-computer-accessories                          .widget_premmerce_filter_filter_widget {display: none;}
            body.tax-product_cat.term-information-storage-devices                   .widget_premmerce_filter_filter_widget {display: none;}
            body.tax-product_cat.term-parts-for-pc                                  .widget_premmerce_filter_filter_widget {display: none;}
            body.tax-product_cat.term-audio-video-photos                            .widget_premmerce_filter_filter_widget {display: none;}
            body.tax-product_cat.term-musical-centres                               .widget_premmerce_filter_filter_widget {display: none;}
            body.tax-product_cat.term-office-equipment                              .widget_premmerce_filter_filter_widget {display: none;}
            body.tax-product_cat.term-fixed-phone                                   .widget_premmerce_filter_filter_widget {display: none;}
            body.tax-product_cat.term-printers-and-scanners                         .widget_premmerce_filter_filter_widget {display: none;}
            body.tax-product_cat.term-network-equipment                             .widget_premmerce_filter_filter_widget {display: none;}
            body.tax-product_cat.term-car-devices                                   .widget_premmerce_filter_filter_widget {display: none;}
            body.tax-product_cat.term-auto-sound                                    .widget_premmerce_filter_filter_widget {display: none;}
            body.tax-product_cat.term-navigators-detectors                          .widget_premmerce_filter_filter_widget {display: none;}
    
    	</style>
    <?php endif; ?>
    
    <?php } );
    
    Автор tolyan59

    (@tolyan59)

    — а каков физический смысл сего действия? Я постарался показать смысл сего действия.

    Можете… Если могу покажите, пожалуйста, конструкцию. Очень хочется уже попробовать.

    Автор tolyan59

    (@tolyan59)

    И ещё. Чек бокс почему-то реагирует на клики в любом пустом месте сайт бара. Это нормально?

    Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    вместо alert( 'чекбокс включён' );

    Так не получится, поскольку JavaScript-код выполняется в браузере, а значение переменной в PHP вы хотите изменить на сервере, и после обновления страницы оно снова сбросится.

    Смысл в том, чтобы пользователь сам решал, видеть ему фильтры или нет.

    Можно сохранять значение, например, в cookies, тогда доступ к нему будет и у JavaScript и у PHP, и при обновлении страницы оно не потеряется.

    Автор tolyan59

    (@tolyan59)

    С сохранением значения в cookies всё получилось. Но значения сохраняются для каждой страницы отдельно (в моём случае отдельно для каждой категории товара). И я пока не знаю хорошо это или плохо.

Просмотр 6 ответов — с 1 по 6 (всего 6)
  • Тема «Изменить глобальную переменную скриптом» закрыта для новых ответов.