web-dev-qa-db-ja.com

Dismissed_wp_pointersの値を1つ削除しますか?

ダッシュボードの「ツアー」を表示するために管理者ポインタを使用します。また、ユーザーがツアーに参加して[閉じる]ボタンを押すと、特定のユーザーの下にある 'dismissed_wp_pointers'の値が 'wp_usermeta'に保存されます。これは、ユーザーが同じ「ツアー」を何度も見ないことを意味します。どれが素晴らしいですか!しかし、私はこの値をクリアすることを可能にするボタンを作成したいと思います。 'dismissed_wp_pointers'を削除したり、その値をすべて消去したりするのではなく、ボタンが押されたときに 'g_tour'と呼ばれる値だけを削除します。

これをどのように達成しますか。

編集:私はこれを試してみました:

<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

何らかの理由で却下されたポインタはカンマ区切りのリストとして格納されるだけです。直列化された配列すらありません。そのため、そこから項目を削除するには、値を取得し、それを配列に変換し、目的の要素を削除して、元に戻して保存します。

// 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 );

wp496_privacyをあなたのポインタのIDに置き換えるだけです。

代わりの方法は、IDの文字列を空の文字列に置き換えることです。

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 );

しかし、それがリストの最後の項目ではない場合は、次のような値になる可能性があります。

wp390_widgets,,text_widget_custom_html

これは問題を起こさないかもしれませんが、WordPressがこの値を期待する方法を乱すようなものです。二重コンマ,,を単一コンマ,に同じ方法で置き換えることができますが、最後のが最後のの場合は末尾のコンマを扱う必要があります。値。そのため、最終的には、Arrayメソッドのほうがずっときれいになります。

1
Jacob Peattie