web-dev-qa-db-ja.com

自分以外の投稿ではなく自分の投稿を編集する機能

他のユーザーではなく自分の投稿をユーザーが編集できるようにする機能は何ですか?私は、投稿作者が自分の所有する投稿でのみプラグイン機能を利用できるようにしようとしています。

このオプションにアクセスするための許可は、その特定の投稿作者にだけあるべきであり、編集者でさえもアクセスを許可すべきではありません。投稿者の横にあるのは、管理者だけです。

プラグインのコードは以下のとおりです。

function init()
{
    // must be logged in
    if( is_user_logged_in() )
    {
        // actions
        add_action('admin_head', array($this,'admin_head'));
        add_action('admin_menu', array($this,'admin_menu'));


        add_action('wp_enqueue_scripts', array($this,'wp_enqueue_scripts'));
        add_action('wp_head', array($this,'wp_head'));
        add_action('wp_footer', array($this,'wp_footer'));
        add_action('wp_ajax_live_edit_update_width', array($this, 'ajax_update_width'));
    }
}

機能を変更するためにプラグインファイルを編集しました(79行目)。

    function init()
    {
        // must be logged in
if( is_user_logged_in() && current_user_can('author') || current_user_can('administrator'))
        {
            // actions
            add_action('admin_head', array($this,'admin_head'));
            add_action('admin_menu', array($this,'admin_menu'));


            add_action('wp_enqueue_scripts', array($this,'wp_enqueue_scripts'));
            add_action('wp_head', array($this,'wp_head'));
            add_action('wp_footer', array($this,'wp_footer'));
            add_action('wp_ajax_live_edit_update_width', array($this, 'ajax_update_width'));
        }
    }

現在、投稿作者と管理者だけがそれにアクセスできます。しかし、私はcurrent_user_can('author')を、作者が自分の投稿を編集できるようにし、他の投稿を編集できないような機能に置き換えたいと思います。 edit_postsedit_published_postsのような機能により、すべての投稿にアクセスできます。

他のユーザーではなく自分の投稿をユーザーが編集できるようにする機能について誰かが教えてもらえますか?私が使った方法が正しいかどうかも教えてください。 if( is_user_logged_in() && current_user_can('author') || current_user_can('administrator'))

これがプラグインのコードです: http://Pastebin.com/m1E9QthM 。オリジナルのプラグインへのリンクは - http://wordpress.org/support/plugin/live-edit です。

2
Netizen

あなたが制限しようとしている機能は、

  • delete_others_posts
  • edit_others_posts

スーパー管理者および管理者を除いて、これらの権限を持つ唯一の役割は編集者です。そのため、Editorからこれらの機能を削除することでこれを達成できるはずです。

/**
 * Remove capabilities from editors.
 *
 * Call the function when your plugin/theme is activated.
 */
function wpcodex_set_capabilities() {

    // Get the role object.
    $editor = get_role( 'editor' );

    // A list of capabilities to remove from editors.
    $caps = array(
        'delete_others_posts',
        'edit_others_posts',
    );

    foreach ( $caps as $cap ) {

        // Remove the capability.
        $editor->remove_cap( $cap );
    }
}
add_action( 'init', 'wpcodex_set_capabilities' );

このコードは、プラグインまたはテーマのアクティブ化中にのみ実行してください。差出人 コーデックス

注: この設定はデータベースに保存され(テーブルwp_options、フィールド 'wp_user_roles')、テーマ/プラグインの有効化および/または無効化時に1回だけ実行する必要があります。

2
sakibmoon

作者は、自分の投稿を公開および管理できる人です。多分 ここでRoles and Capabilities のコーデックスを見れば助けになるでしょう、それはWordPressが持っているすべての役割とさまざまな機能を教えてくれます。

機能を組み合わせて組み合わせる場合は、おそらく、 add_role() を使用して新しいロールを作成する必要があります。

1
RachieVee

関数current_user_can()の2番目の引数として投稿IDを渡すことで、メタ機能edit_postで特別な投稿を編集する権限を確認できます。

current_user_can( 'edit_post', $post_ID )

この投稿のedit_postsフィールドが現在のユーザーIDと一致する場合、これはケーパビリティpost_authorに評価されます。これがどのように機能するかについての詳細は、1073行目のwp-includes/capabilities.phpの関数map_meta_cap()のコードを参照してください。

編集:あなたのプラグインに見られるものについては、あなたは条件付きであなたのプラグイン機能を適用するためにis_singular()をチェックし、get_the_ID()によってIDを得ることができます。しかし、initフックはそのために早めにすることです。代わりにwpフックを使用してください。これを使えば、たとえば、単数のクエリ(ページ、投稿など)にあなたのスクリプトを適用することができます。あなたが投稿を保存するときはいつでもメタキャップをチェックすることを忘れないでください(例えばajaxコールバックで)。

1
David

get_post()get_current_user_idpost_author の情報と等しいかどうかを確認し、それに基づいて行動することができます。

if ('edit.php' === $GLOBALS['pagenow']) {
    if (
        current_user_can('administrator')
        || get_post(filter_input(INPUT_POST, 'post_id'))->post_author == get_current_user_id()
    ) {
        // Yes, you can
    } else {
        wp_redirect(admin_url());
        exit;
    }
}
1
tfrommen