GOOGLE ADS

Dienstag, 19. April 2022

So überprüfen Sie, ob ein Element eine Klasse mit PHP in der Wordpress-Datei function.php hat

Ich versuche, ein Element im Frontend auszublenden und mich an die Benutzerauswahl zu erinnern, indem ich ein Cookie in PHP erstelle.

So habe ich es eingerichtet:

Ich habe einige HTML- und JS-Skripte in einem HTML-Widget auf der Seite im Front-End

<div id="training-banner"> training banner design here </div>
<button onclick="myFunction()" id="close-btn">X</button>
<script>
function myFunction() {
var element = document.getElementById("training-alert");
element.classList.add("hidebanner");
}
</script>

Dann habe ich die Cookie-Funktion in die function.php des Child-Themes geschrieben:

add_action('init', function() {
if (!isset($_COOKIE['training_banner_cookie'])) {
setcookie('training_banner_cookie', 'showbanner', strtotime('+1 day'));
}

if (class_exists('hidebanner')){
?><style>#training-alert{display:none;}</style> <?php
setcookie('training_banner_cookie', 'hidebanner', strtotime('+1 day'));
}
$cookieValue = $_COOKIE['training_banner_cookie'];
if ($cookieValue == "hidebanner"){
?><style>#training-alert{display:none;}</style> <?php
}
});

Aus irgendeinem Grund funktioniert die class_exists()PHP-Funktion nicht. Haben Sie eine Idee, wie dies erreicht werden kann?


Lösung des Problems

https://www.php.net/manual/en/function.class-exists.php

class-existswird in Ihrem Fall nicht verwendet. Es wird verwendet, um zu prüfen, ob eine Klasse in Ihrem PHP-Codeblock vorhanden ist.

if (class_exists('MyClass')) {
$myclass = new MyClass();
}

Was Sie tun möchten, ist, die Auswahl der Benutzer zu speichern. Sie können einfach JS verwenden, um dies zu erreichen.

<div id="training-banner"> training banner design here </div>
<button onclick="myFunction()" id="close-btn">X</button>
<script>
function getCookie(cookieName: string, cookie?: string): string {
const name = cookieName + '='
const decodedCookie = decodeURIComponent(cookie || document.cookie)
const ca = decodedCookie.split(';')
for (let i = 0; i < ca.length; i++) {
let c = ca[i]
while (c.charAt(0) === ' ') {
c = c.substring(1)
}
if (c.indexOf(name) === 0) {
return c.substring(name.length, c.length)
}
}
return ''
}
function setCookie(
cookieName,
value,
days,
isSecure = true
): void {
let expires = ''
const secure = isSecure? '; Secure': ''
if (days) {
const date = new Date()
date.setTime(date.getTime() + days * 86400000)
expires = ';expires=' + date.toUTCString()
}
document.cookie = cookieName + '=' + value + expires + ';path=/' + secure
}
function myFunction() {
var element = document.getElementById("training-alert");
element.classList.add("hidebanner");
setCookie('training_banner_cookie_hide', true, 1)
}
function init(){
var shouldHideBanner = getCookie('training_banner_cookie_hide')
if(shouldHideBanner){
var element = document.getElementById("training-alert");
element.style.display = 'none';
}
}
init()
</script>

Keine Kommentare:

Kommentar veröffentlichen

Warum werden SCHED_FIFO-Threads derselben physischen CPU zugewiesen, obwohl CPUs im Leerlauf verfügbar sind?

Lösung des Problems Wenn ich das richtig verstehe, versuchen Sie, SCHED_FIFO mit aktiviertem Hyperthreading ("HT") zu verwenden, ...