Pregunta sobre Developing with WordPress de Wordpress:

Para editar el DOM de una página HTML si el usuario está conectado (PHP y JS)

Un usuario preguntó 👇

Hola, estoy intentando eliminar un elemento y su extracto de una página HTML. El elemento debe eliminarse en función de si el usuario está conectado o no. Además, si el usuario no ha iniciado sesión, necesito cambiar uno de los enlaces en la misma página (atributo de etiqueta href <a>). Intenté hacer esto agregando el siguiente código al final del archivo functions.php, pero probablemente cometí errores y esto no funciona:


// IF USER IS LOGGED
if ( is_user_logged_in() ) {
?>
<script>
	var estrattolibro = document.getElementById("shortcode-b5afccd84b849874ca7fc0ded4bc1c9b");
	estrattolibro.parentNode.removeChild(estrattolibro);
</script>
<?php
}

// IF USER IS NOT LOGGED
if ( !is_user_logged_in() ) {
?>
<script>
	var nodo = document.getElementsByClassName("has-edge is-page-flip")[0];
	nodo.setAttribute("href", "https://www.mywebsite.com/prodotto/in-esclusiva-settimanale/?read-book=156");
	var librocompleto = document.getElementById("shortcode-a68fa81bfb7e274873f75fbec325a170");
	librocompleto.parentNode.removeChild(librocompleto);
</script>
<?php
}

¡Gracias por la ayuda!

(@bcworkz)

Hace 1 año, 3 meses

Es demasiado pronto para hacer algo así directamente desde functions.php. El usuario actual aún no se ha decidido y la salida ahora romperá otras partes de WP. Además, los elementos que busca aún no están en el DOM. Pruebe la acción «wp_footer» y ejecute su código desde la llamada de acción adicional. Además, ejecute su script en el window.onload salida para asegurarse de que el elemento esté en su lugar antes de intentar quitarlo.

Podría considerar ocultar el elemento con CSS en lugar de eliminarlo. Si la seguridad del elemento en DOM sigue siendo un problema, no es mucho mejor eliminarlo a través de JS, los datos aún se envían y están disponibles para cualquiera que quiera obtenerlos. Una forma de desactivar eso. Si la seguridad es importante, nunca es necesario enviar los datos, debe bloquear el lado del servidor.

(@ wpfor7)

Hace 1 año, 3 meses

¡Hola bcworkz! ¡gracias por su respuesta! Si agrego el siguiente código al final de footer.php en la carpeta del tema secundario


...
// IF USER IS LOGGED
if ( is_user_logged_in() ) {
?>
<script>
funzione_loggato(){
	var estrattolibro = document.getElementById("shortcode-b5afccd84b849874ca7fc0ded4bc1c9b");
	estrattolibro.parentNode.removeChild(estrattolibro);
}
</script>
<?php
}

// IF USER IS NOT LOGGED
if ( !is_user_logged_in() ) {
?>
<script>
funzione_non_loggato(){
	var nodo = document.getElementsByClassName("has-edge is-page-flip")[0];
	nodo.setAttribute("href", "https://www.mywebsite.com/prodotto/in-esclusiva-settimanale/?read-book=156");
	var librocompleto = document.getElementById("shortcode-a68fa81bfb7e274873f75fbec325a170");
	librocompleto.parentNode.removeChild(librocompleto);
}
</script>
<?php
}
?>
</body>
</html>

… Y puse este otro código en un widget de pie de página (dentro de HTML personalizado)


<script>
	window.onload=funzione_loggato();funzione_non_loggato();
</script>

Esto no funciona. No tengo mucha experiencia, ¿podrías darme una explicación más sencilla? ¡Gracias!

(@ wpfor7)

Hace 1 año, 3 meses

¡Hola! ¿Cómo puedo contratar la acción «wp_footer», ejecutar mi código desde la llamada de acción adicional y ejecutar el script en window.onload? ¿Está bien lo que escribí arriba? ¡Gracias!

PD: Hasta ahora no tengo problemas de seguridad que resolver.

Esta respuesta fue modificada hace 1 año, 3 meses.

(@ wpfor7)

Hace 1 año, 3 meses

¡Hola! Resolví escribiendo este código:


// IF USER IS LOGGED
if ( is_user_logged_in() ) {
?>
<script>

window.addEventListener('load', function() {

		var estrattolibro = document.getElementById("shortcode-b5afccd84b849874ca7fc0ded4bc1c9b");
		estrattolibro.parentNode.removeChild(estrattolibro);
}
)

</script>
<?php
}

// IF USER IS NOT LOGGED
if ( !is_user_logged_in() ) {
?>
<script>

window.addEventListener('load', function() {

		var nodo = document.getElementsByClassName("has-edge is-page-flip")[0];
		nodo.setAttribute("href", "https://www.mywebsite.com/prodotto/in-esclusiva-settimanale/?read-book=156");
		var librocompleto = document.getElementById("shortcode-a68fa81bfb7e274873f75fbec325a170");
		librocompleto.parentNode.removeChild(librocompleto);
		
}
)

</script>
<?php
}
?>

</body>
</html>

bcworkz: ¡Tu ayuda fue importante! ¡Gracias!

(@bcworkz)

Hace 1 año, 3 meses

De nada. Me alegra que haya podido encontrar una solución. Sé lo difícil y frustrante que es cuando empiezo a programar para hacer que algo funcione. ¡Pero vale la pena cuando tienes éxito!

¿Solucionó tu problema??

0 / 0

Deja una respuesta 0

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *