liukin
Dseda
Verificación en dos pasos activada
Verificado por Whatsapp
function setAndViewPostViews($postID) {
$count_key = 'views';
$count = get_post_meta($postID, $count_key, true);
if($count==''){
$count = 0;
delete_post_meta($postID, $count_key);
add_post_meta($postID, $count_key, '0');
}else{
$count++;
update_post_meta($postID, $count_key, $count);
}
return $count;}
Hola te serviria algo como una consulta para saber si el ip ya esta guardado en la base de datos ejemplo[MENTION=168322]liukin[/MENTION] buscando en google encontre varias formas las cuales es ir guardando las ip de los visitantes en un get_post_meta y luego
ir comparandolas con el visitante actual y si no existe actualizar los dos get_post_meta!!
tabien puedes agregarle una cookie!! :encouragement:
Hola.Gracias a todos por las respuestas.:encouragement:
Intentaré hacer lo que comentáis pero veo que se me va a complicar ya que al tratarse de un único contador(código en el functions.php de Wordpress) para que funcione en los distintos post creo que no va a funcionar. Si la IP existe en la BD quiero que no me cuente en un determinado post, pero en otro sí y al encontrarse ya en la lista lo ignoraría según lo entiendo.
Seguramente tenga que optar por un plugin específico, cosa que quería evitar.
function mi_ip() {
$ipaddress = '';
if (isset($_SERVER['HTTP_CLIENT_IP']))
$ipaddress = $_SERVER['HTTP_CLIENT_IP'];
else if(isset($_SERVER['HTTP_X_FORWARDED_FOR']))
$ipaddress = $_SERVER['HTTP_X_FORWARDED_FOR'];
else if(isset($_SERVER['HTTP_X_FORWARDED']))
$ipaddress = $_SERVER['HTTP_X_FORWARDED'];
else if(isset($_SERVER['HTTP_X_CLUSTER_CLIENT_IP']))
$ipaddress = $_SERVER['HTTP_X_CLUSTER_CLIENT_IP'];
else if(isset($_SERVER['HTTP_FORWARDED_FOR']))
$ipaddress = $_SERVER['HTTP_FORWARDED_FOR'];
else if(isset($_SERVER['HTTP_FORWARDED']))
$ipaddress = $_SERVER['HTTP_FORWARDED'];
else if(isset($_SERVER['REMOTE_ADDR']))
$ipaddress = $_SERVER['REMOTE_ADDR'];
else
$ipaddress = 'UNKNOWN';
return $ipaddress;
}
function setAndViewPostViews($postID) {
$ip_actual = mi_ip();
$count_key = 'views';
$ips_key = 'ips_contador';
$count = get_post_meta($postID, $count_key, true);
$ips = unserialize(get_post_meta($postID, $ips_key, true));
if( $count===FALSE ){
/* AUN NO EXISTE EL CONTADOR, ASI QUE LO INICIAMOS CON UN 1, Y AGREGAMOS LA IP */
$count = 1;
$ips = array($ip_actual);
update_post_meta($postID, $count_key, $count);
update_post_meta($postID, $ip_key, serialize($ips));
}else{
/* ya existe el contador, por lo que minimo ya debe existir una IP almacenada, asi que revisamos */
if( $ips!==FALSE ) {
/* SI EXISTEN IPS ALMACENADAS, AHORA BUSCAMOS QUE LA IP ACTUAL NO EXISTA */
if( $array_search($ip_actual, $ips)!==FALSE ) {
$count++;
array_push($ips, $ip_actual);
update_post_meta($postID, $count_key, $count);
update_post_meta($postID, $ip_key, serialize($ips));
}
} else {
/* NO EXISTEN IPS ALMACENADAS, ASI QUE AUMENTAMOS EL CONTADOR Y AGREGAMOS LA IP */
$count++;
$ips = array($ip_actual);
update_post_meta($postID, $count_key, $count);
update_post_meta($postID, $ip_key, serialize($ips));
}
}
return $count;
}
El problema es que vas a bombardear los recursos de tu web con guardar y comparar tantas IP (sobre todo si usas un campo personalizado para gardar, extraer y comparar, veo una bola de nieve traga recursos ahí). Como tengas muchas visitas de golpe o con el paso del tiempo, el sitio se pondrá lento y terminará cayéndose a cada momento.
Lo más sencillo es lo que te dijeron al principio de usar una cokkie, pero si quieres insistir en guardar todas las IP, mejor usa wpdb para alojar las IP en una tabla aparte en tu BD, para luego hacer la búsqueda de la IP de cadas visitante como una consulta SQL(sera mas óptimo).
kj
PHP:function mi_ip() { $ipaddress = ''; if (isset($_SERVER['HTTP_CLIENT_IP'])) $ipaddress = $_SERVER['HTTP_CLIENT_IP']; else if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])) $ipaddress = $_SERVER['HTTP_X_FORWARDED_FOR']; else if(isset($_SERVER['HTTP_X_FORWARDED'])) $ipaddress = $_SERVER['HTTP_X_FORWARDED']; else if(isset($_SERVER['HTTP_X_CLUSTER_CLIENT_IP'])) $ipaddress = $_SERVER['HTTP_X_CLUSTER_CLIENT_IP']; else if(isset($_SERVER['HTTP_FORWARDED_FOR'])) $ipaddress = $_SERVER['HTTP_FORWARDED_FOR']; else if(isset($_SERVER['HTTP_FORWARDED'])) $ipaddress = $_SERVER['HTTP_FORWARDED']; else if(isset($_SERVER['REMOTE_ADDR'])) $ipaddress = $_SERVER['REMOTE_ADDR']; else $ipaddress = 'UNKNOWN'; return $ipaddress; } function setAndViewPostViews($postID) { $ip_actual = mi_ip(); $count_key = 'views'; $ips_key = 'ips_contador'; $count = get_post_meta($postID, $count_key, true); $ips = unserialize(get_post_meta($postID, $ips_key, true)); if( $count===FALSE ){ /* AUN NO EXISTE EL CONTADOR, ASI QUE LO INICIAMOS CON UN 1, Y AGREGAMOS LA IP */ $count = 1; $ips = array($ip_actual); update_post_meta($postID, $count_key, $count); update_post_meta($postID, $ip_key, serialize($ips)); }else{ /* ya existe el contador, por lo que minimo ya debe existir una IP almacenada, asi que revisamos */ if( $ips!==FALSE ) { /* SI EXISTEN IPS ALMACENADAS, AHORA BUSCAMOS QUE LA IP ACTUAL NO EXISTA */ if( $array_search($ip_actual, $ips)!==FALSE ) { $count++; array_push($ips, $ip_actual); update_post_meta($postID, $count_key, $count); update_post_meta($postID, $ip_key, serialize($ips)); } } else { /* NO EXISTEN IPS ALMACENADAS, ASI QUE AUMENTAMOS EL CONTADOR Y AGREGAMOS LA IP */ $count++; $ips = array($ip_actual); update_post_meta($postID, $count_key, $count); update_post_meta($postID, $ip_key, serialize($ips)); } } return $count; }
NO LO TESTIE!! PERO MAS O MENOS ASI DEBE DE FUNCIONAR
PHP:function mi_ip() { $ipaddress = ''; if (isset($_SERVER['HTTP_CLIENT_IP'])) $ipaddress = $_SERVER['HTTP_CLIENT_IP']; else if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])) $ipaddress = $_SERVER['HTTP_X_FORWARDED_FOR']; else if(isset($_SERVER['HTTP_X_FORWARDED'])) $ipaddress = $_SERVER['HTTP_X_FORWARDED']; else if(isset($_SERVER['HTTP_X_CLUSTER_CLIENT_IP'])) $ipaddress = $_SERVER['HTTP_X_CLUSTER_CLIENT_IP']; else if(isset($_SERVER['HTTP_FORWARDED_FOR'])) $ipaddress = $_SERVER['HTTP_FORWARDED_FOR']; else if(isset($_SERVER['HTTP_FORWARDED'])) $ipaddress = $_SERVER['HTTP_FORWARDED']; else if(isset($_SERVER['REMOTE_ADDR'])) $ipaddress = $_SERVER['REMOTE_ADDR']; else $ipaddress = 'UNKNOWN'; return $ipaddress; } function setAndViewPostViews($postID) { $ip_actual = mi_ip(); $count_key = 'views'; $ips_key = 'ips_contador'; $count = get_post_meta($postID, $count_key, true); $ips = unserialize(get_post_meta($postID, $ips_key, true)); if( $count===FALSE ){ /* AUN NO EXISTE EL CONTADOR, ASI QUE LO INICIAMOS CON UN 1, Y AGREGAMOS LA IP */ $count = 1; $ips = array($ip_actual); update_post_meta($postID, $count_key, $count); update_post_meta($postID, $ip_key, serialize($ips)); }else{ /* ya existe el contador, por lo que minimo ya debe existir una IP almacenada, asi que revisamos */ if( $ips!==FALSE ) { /* SI EXISTEN IPS ALMACENADAS, AHORA BUSCAMOS QUE LA IP ACTUAL NO EXISTA */ if( $array_search($ip_actual, $ips)!==FALSE ) { $count++; array_push($ips, $ip_actual); update_post_meta($postID, $count_key, $count); update_post_meta($postID, $ip_key, serialize($ips)); } } else { /* NO EXISTEN IPS ALMACENADAS, ASI QUE AUMENTAMOS EL CONTADOR Y AGREGAMOS LA IP */ $count++; $ips = array($ip_actual); update_post_meta($postID, $count_key, $count); update_post_meta($postID, $ip_key, serialize($ips)); } } return $count; }
NO LO TESTIE!! PERO MAS O MENOS ASI DEBE DE FUNCIONAR
El problema es que vas a bombardear los recursos de tu web con guardar y comparar tantas IP (sobre todo si usas un campo personalizado para gardar, extraer y comparar, veo una bola de nieve traga recursos ahí). Como tengas muchas visitas de golpe o con el paso del tiempo, el sitio se pondrá lento y terminará cayéndose a cada momento.
Lo más sencillo es lo que te dijeron al principio de usar una cokkie, pero si quieres insistir en guardar todas las IP, mejor usa wpdb para alojar las IP en una tabla aparte en tu BD, para luego hacer la búsqueda de la IP de cadas visitante como una consulta SQL(sera mas óptimo).
kj
Exacto, eso me temo con el método de la IP al ser en varios post por separado. Como digo también me valdría algún tip para que el usuario no pudiera abusar del F5 o refrrescar la página y por lo que veo igual es mejor usar una cookie como comentas. Aún le estoy dando vueltas al problema antes de ponerme en manos de un experto en programación que me lo realize.
Exacto, eso me temo con el método de la IP al ser en varios post por separado. Como digo también me valdría algún tip para que el usuario no pudiera abusar del F5 o refrrescar la página y por lo que veo igual es mejor usar una cookie como comentas. Aún le estoy dando vueltas al problema antes de ponerme en manos de un experto en programación que me lo realize.
- - - Actualizado - - -
Gracias proTest :star2:
Le voy ha echar un ojo al código a ver si consigo adaptarlo a mi sitio.
Buen código!:encouragement:
Utilizamos cookies y tecnologías similares para los siguientes fines:
¿Aceptas las cookies y estas tecnologías?
Utilizamos cookies y tecnologías similares para los siguientes fines:
¿Aceptas las cookies y estas tecnologías?