web-dev-qa-db-fra.com

Supprimer une valeur dans licencié_wp_pointers?

J'utilise des pointeurs d'administration pour montrer un "tour" du tableau de bord. Et lorsque l'utilisateur a fait le tour et appuyé sur le bouton Fermer, il enregistre une valeur dans 'licencié_wp_pointers' sous l'utilisateur spécifique dans 'wp_usermeta'. Cela signifie que l'utilisateur ne verra pas le même "tour" encore et encore. Qui est genial! Mais j'aimerais créer un bouton qui me permette d'effacer cette valeur. Je ne veux pas supprimer 'rejeted_wp_pointers' ou effacer toutes ses valeurs, je veux supprimer uniquement la valeur appelée 'g_tour' lorsque le bouton est enfoncé.

Comment pourrais-je y arriver?

EDIT: J'ai essayé ceci:

<a href="index.php?action=callfunction">Click</a>
<?php
if(isset($_GET['action']) && $_GET['action'] == 'callfunction') {
    // Get the dismissed pointers as saved in the database.
    $pointers = get_user_meta( $user_id, 'dismissed_wp_pointers', true );

    // Create an array by separating the list by comma.
    $pointers = explode( ',', $pointers );

    // Get the index in the array of the value we want to remove.
    $index = array_search( 'tour', $pointers );

    // Remove it.
    unset( $pointers[$index] );

    // Make the list a comma separated string again.
    $pointers = implode( ',', $pointers );

    // Save the updated value.
    update_user_meta( $user_id, 'dismissed_wp_pointers', $points );
}
?>
1
joq3

Pour une raison quelconque, les pointeurs supprimés sont simplement stockés dans une liste séparée par des virgules. Pas même un tableau sérialisé. Ainsi, le moyen de supprimer un élément consiste à obtenir la valeur, à le transformer en tableau, à supprimer l'élément souhaité, à le reconstituer et à enregistrer:

// Get the dismissed pointers as saved in the database.
$pointers = get_user_meta( $user_id, 'dismissed_wp_pointers', true );

// Create an array by separating the list by comma.
$pointers = explode( ',', $pointers );

// Get the index in the array of the value we want to remove.
$index = array_search( 'wp496_privacy', $pointers );

// Remove it.
unset( $pointers[$index] );

// Make the list a comma separated string again.
$pointers = implode( ',', $pointers );

// Save the updated value.
update_user_meta( $user_id, 'dismissed_wp_pointers', $points );

Il suffit de remplacer wp496_privacy par l'identifiant de votre pointeur.

Une alternative consiste simplement à remplacer la chaîne de l'ID par une chaîne vide:

pointers = get_user_meta( $user_id, 'dismissed_wp_pointers', true );

$pointers = str_replace( 'wp496_privacy', '', $pointers );

update_user_meta( $user_id, 'dismissed_wp_pointers', $points );

Mais si ce n'est pas le dernier élément de la liste, vous pouvez vous retrouver avec des valeurs telles que:

wp390_widgets,,text_widget_custom_html

Ce qui ne poserait peut-être pas de problèmes, mais modifie en quelque sorte l'apparence de cette valeur pour WordPress. Vous pouvez toujours alors simplement remplacer les doubles virgules ,, par des virgules simples , de la même manière, mais vous devrez alors traiter une virgule de fin à la fin si elle était la dernière valeur. Donc, finalement, je trouve que la méthode Array est beaucoup plus propre.

1
Jacob Peattie