Soporte » WordPress Avanzado » add_action con add_filter

  • Resuelto joosemi1993

    (@joosemi1993)


    Hola a todos !

    Me gustaría saber si es posible poner un add_filter dentro de un add_action.
    Es decir, lo que quiero es que cuando un usuario cargue mi pagina por primera vez el sistema compruebe si esta una cookie (predefinida) establecida, si no lo esta entonces añado un filtro de geolocalizacion con su divisa correspondiente. Si esta definida pues no hago nada.

    El código que tengo es este:

    add_action('init', 'my_setcookie');
    
    // my_setcookie() set the cookie on the domain and directory WP is installed on
    function my_setcookie(){
     	if (!isset($_COOKIE[''])) {
     		setcookie("DelmaGeolocationCountry", 'Geolocation_currency', 0, '/'); 
    	    add_filter('wcml_client_currency','geo_client_currency');
            function geo_client_currency($client_currency) {
                    $country = WC()->customer->get_shipping_country();
                 switch ($country) {
                    // Others
                    case "CH": return "CHF"; break;
                    case "GB": return "GBP"; break;
                    case "US": return "USD"; break;
                    default: return "EUR"; break;
                }
          
            }
    	} else {
    		setcookie("DelmaGeolocationCountry", 'Geocurrency', 0, '/'); 	
      }
    }

    Me funciona bien pero a la hora de acceder al backend no me deja, me da un error 500. ¿Alguien sabría decirme el por qué?

Viendo 2 respuestas - 1 de 2 (de 2 total)
  • Moderador LGrusin

    (@lgrusin)

    ¿Por qué pones la función geo_client_currency y el filtro dentro de la otra función?

    Nada…al final lo conseguí solucionar. Desarrollé otro código muy parecido y funcionó.

    function geot_woo_default_currency( $currency ) {
    	if( isset( $_COOKIE['geot_currency'] ) ) return $currency;
    	$geoip = geoip_detect2_get_info_from_current_ip();
    	$user_country = $geoip->raw[ 'country' ][ 'iso_code' ];
      	switch( $user_country ) {
        	case 'CH':
          		$currency = 'CHF';
          		break;
        	case 'US':
          		$currency = 'USD';
          		break;
          	case "GB": 
                return "GBP"; 
                break;
        	default:
          		$currency = 'EUR';
          		break;
      	}
      	// save cookie to execute this only once
      	setcookie( 'geot_currency', $currency, time() + (86400 * 30), "/");
      	return $currency;
    }
    
    add_filter('wcml_client_currency','geot_woo_default_currency');
Viendo 2 respuestas - 1 de 2 (de 2 total)
  • Debes estar registrado para responder a este tema.