ユーザーに新しいタグの作成を許可せず、既存のタグの使用を許可する方法


9

特定のロールで新しいタグを追加できるようにしたいのですが、他のユーザーはテキストバーを使用して既存のタグを検索できる必要があります。

サイドバーのタグバーを非表示にできることはわかっていますが、それは必要ありません。「申し訳ありませんが、このタグは存在しません」などと表示したいだけです。

それを行うプラグインまたは関数はありますか?

回答:


10

pre_insert_term次のように、にフックして、分類法を確認し、ユーザーが指定されたロールを持っているかどうかを確認できます。

function disallow_insert_term($term, $taxonomy) {

    $user = wp_get_current_user();

    if ( $taxonomy === 'post_tag' && in_array('somerole', $user->roles) ) {

        return new WP_Error(
            'disallow_insert_term', 
            __('Your role does not have permission to add terms to this taxonomy')
        );

    }

    return $term;

}

add_filter('pre_insert_term', 'disallow_insert_term', 10, 2);

これにより、ユーザーは新しい用語を挿入できなくなりますが、既存の用語を検索して投稿に追加できます。

投稿編集画面で、ユーザーが存在しない用語名を入力してEnterキーを押すか、DOMに用語を追加する追加ボタンをクリックできることに注意してください。ただし、この時点では、用語はデータベースに追加されるまでデータベースに追加されません。ユーザーは投稿を公開または更新し、その時点で用語は許可されません。


こんにちは、助けてくれてありがとう:)私はこれを試しましたが、何もしなかったようです。私は正直に言って、それはおそらく私自身のせいだと言います。私は自分のコードをコピーして関数に貼り付け、もちろん 'somerole'ビットを変更しました。その役割に対してタグを追加することは引き続き可能です。
Jorn Reuvers、2015

防止しようとしているユーザーの役割は何ですか?また、正しい分類法のタグを防止しようとしていますか?この場合post_tag、他の分類法categoriesやカスタム分類法ではありませんか?
アダム

現在、編集者の役割がそれをできないようにしています。そして、それは標準の分類法です(つまり、post_tagになるはずです)。まだテストしているので、まだ何も作成していません。
Jorn Reuvers、2015

次にデバッグを開始します。ではwp-config.php、次の定数を設定しdefine('WP_DEBUG', true);define('WP_DEBUG_LOG', true);し、 define('WP_DEBUG_DISPLAY', false);その後、上記の機能の抜粋で、とコールログerror_log($taxonomy);とする別の呼び出しerror_log(implode(', ', $user->roles));、その後のポストを更新し、タグを追加し、これはその後、作成されdebug.logたファイルをwp-contentディレクトリ。このコールバックは私のために機能するので、この関数が呼び出されているかどうか、および関数が条件ステートメントを正しく入力しているかどうかを確認する必要があります。
アダム

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.