web-dev-qa-db-ja.com

許可する AJAX 管理者以外の役割への電話

私のウェブサイトでは、登録ユーザー(購読者役割)が下書きを送信でき、管理者がそれらを検証すれば公開されます。

新しい投稿を送信するためのフロントエンドエディタにタグボックスを追加しようとしています。オートコンプリート機能を実装するには、このURLにAJAX呼び出しを行います。

http://example.com/wp-admin/admin-ajax.php?action=ajax-tag-search&tax=post_tag

これは管理者ユーザーにとってはうまくいきますが、加入者にとってはうまくいきません。誰かがadmin-ajax.phpを呼び出さずにこれを達成する方法を知っていますか?

1
Masta

すべてのWordPress AJAX呼び出しは、フロントエンドでもバックエンドでも、admin-ajax.phpによって処理されるべきです。アクセスを許可するには、AJAX callのコールバック関数を登録する必要があります。これらの行をファイルに追加します。

add_action( 'wp_ajax_prefix_update_post', 'prefix_update_post' );
add_action( 'wp_ajax_nopriv_prefix_update_post', 'prefix_update_post' );

ログインしていないユーザーはドラフトを送信できないようにするため、prefix_update_post関数に検証を追加してください。

だからこの行はトリックをする必要があります:

function prefix_update_post() {

    if ( current_user_can( 'edit_post' ) ) {

        // your goodies here

    }

}

すべてうまくいけば、完璧です。それ以外の場合はAJAX呼び出しでuserIDを送信し、Userに正しい権限があるかどうかを確認する必要があります(get_user_by('id', $userid)

3
fischi

あなたのユーザを購読者の代わりに寄稿者にしてみませんか?デフォルトでは、寄稿者はドラフト投稿を投稿できますが公開はできません。さらにAJAX関数が機能します。

投稿者がダッシュボードにアクセスしたくない場合は、次のスニペットを使用して投稿者を締め出すことができます。

function wpse_77140_restrict_admin() {
    if ( ! current_user_can( 'publish_posts' ) )
        wp_redirect( home_url() );
}

add_action( 'admin_init', 'wpse_77140_restrict_admin' );
5
shea