質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.12%

編集者権限でも管理バーに表示されるように権限を与えたい。

受付中

回答 2

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 1,801

akkkkin

score 79

woocommerceでショッピングサイトを構築し、
初回のみ割引が適用できるwoo-first-discountというプラグインを入れました。

そして、
[ wp-admin-menu-manager](https : //codecanyon.net/item/wp-admin-menu-manager/9520160)という権限別に管理メニューを編集できるプラグインで
編集者権限でも管理メニューのサイドバーに表示されうように設定したんですが、
表示されません。ちなみにwoo-first-discountのプラグインはもともと
管理者権限でしか表示されていません。

となると、woo-first-discountのプラグイン自体の中身をカスタマイズして、
編集者権限でもwoo-first-discountが表示されるようにしたいのですが、
どこをいじればいいのでしょうか。以下にwoo-first-discountのプラグインの
phpファイルを添付しました。woo-first-discountは以下のファイルだけです。

<?php
/**
 * Plugin Name: First Order Discount
 * Plugin URI: http://fmrfox.com/first-order-discount/
 * Description: This plugin add some discount for authorized customer when they make first order
 * Version: 1.0.5
 * Author: Andriyan Anton
 * Author URI: http://fmrfox.com
 * Text Domain: woo-first-discount
 * Domain Path: /lang
 * License: GPL2
 */

// Exit if accessed directly.
if ( ! defined( 'ABSPATH' ) ) {
    exit;
}

add_action( 'admin_menu', 'first_order_add_add_admin_menu' );
add_action( 'admin_init', 'first_order_add_settings_init' );

/* Include translations */
function first_order_add_load_textdomain() {
    load_plugin_textdomain( 'woo-first-discount', false, dirname( plugin_basename( __FILE__ ) ) . '/lang/' );
}
add_action('plugins_loaded', 'first_order_add_load_textdomain');

/* Admin sttings page */
function first_order_add_add_admin_menu(  ) {
    add_submenu_page( 'woocommerce', 'First Order Discount', 'First Order Discount', 'manage_options', 'woocomerce_first_order_discount', 'first_order_add_options_page' );
}

function first_order_add_settings_init(  ) {
    register_setting( 'pluginPage', 'first_order_add_settings' );
    add_settings_section( 'first_order_add_pluginPage_section', __( 'Choose your setting', 'woo-first-discount' ), '', 'pluginPage' );
    add_settings_field( 'first_order_choose', __( 'Choose discount type', 'woo-first-discount' ), 'first_order_choose_render', 'pluginPage', 'first_order_add_pluginPage_section' );
    add_settings_field( 'first_order_add_value',  __( 'Choose discount value', 'woo-first-discount' ), 'first_order_add_value_render', 'pluginPage',    'first_order_add_pluginPage_section' );
}

function first_order_choose_render(  ) {
    $options = get_option( 'first_order_add_settings' );
    ?>
    <input id="off" type='radio' name='first_order_add_settings[first_order_choose]' <?php checked( $options['first_order_choose'], 'off' ); ?> value='off'>
    <label for="off"><?php echo __( 'Disable first order discount', 'woo-first-discount' ); ?></label>
    <br>
    <input id="fixed" type='radio' name='first_order_add_settings[first_order_choose]' <?php checked( $options['first_order_choose'], 'fixed' ); ?> value='fixed'>
    <label for="fixed"><?php echo __( 'Fixed discount', 'woo-first-discount' ); ?></label>
    <br>
    <input id="percent" type='radio' name='first_order_add_settings[first_order_choose]' <?php checked( $options['first_order_choose'], 'percent' ); ?> value='percent'>
    <label for="percent"><?php echo __( 'Percent discount', 'woo-first-discount' ); ?></label>
    <?php
}

function first_order_add_value_render(  ) {
    $options = get_option( 'first_order_add_settings' );
    ?>
    <input type='number' min="0" name='first_order_add_settings[first_order_add_value]' value='<?php echo $options['first_order_add_value']; ?>'>
    <?php
}

function first_order_add_options_page(  ) {
    ?>
    <form action='options.php' method='post'>
        <h2><?php echo __( 'First Order Discount', 'woo-first-discount' ); ?></h2>
        <?php
        settings_fields( 'pluginPage' );
        do_settings_sections( 'pluginPage' );
        submit_button();
        ?>
    </form>
    <?php
}

/* Discount */
function first_order_add_fee() {
    global $wpdb, $woocommerce;
    if ( is_user_logged_in() ) {
        $customer_id = get_current_user_id();
        $orderNumCheck = wc_get_customer_order_count( $customer_id ); // count orders by current customer
        $options = get_option( 'first_order_add_settings' );
        $discountType = $options['first_order_choose'];
        $discountValue = $options['first_order_add_value'];

        if ($orderNumCheck == 0 and $discountType != 'off') { // if first order by user
            $subtotal = WC()->cart->cart_contents_total;
            if ($discountType == 'fixed') {
                WC()->cart->add_fee( '初回割引', -$discountValue );
            } else {
                $discount = $discountValue/100;
                WC()->cart->add_fee( '初回割引', -$subtotal*$discount );
            }
        } 
    }
}

add_action( 'woocommerce_cart_calculate_fees','first_order_add_fee' );
?>

もし詳しい方がいらっしゃればご教示いただけますとありがたいです。

[追記]
User role editorというプラグインでも試してみましたが、
そもそも該当するプラグインの権限が表示されません。
イメージ説明
したがって権限の設定がUser role editorではできない状況です。

表示させたい項目は以下の画像の箇所です。
イメージ説明
First Order Discountの項目のパラメーター↓
?page=woocomerce_first_order_discount

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

+3

wp-admin-menu-managerなるプラグインがどんなものか知りませんが、manage_optionsの権限を与えれば表示されるはずです。
User Role Editorでも同じような設定が可能ですが、編集者権限でWooCommerceを扱えるようにしてmanage_optionsの権限を与えると、お使いになりたいプラグインが編集者権限でも使えるようになります。
https://ja.wordpress.org/plugins/user-role-editor/

![イメージ説明](aedee3eeacd18c7ba02a083b36e70f7e.jpeg)

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/07/10 09:40

    コメントありがとうございます。試しましたがプラグインの権限項目が表示されません。詳しくは上記に追記しました。

    キャンセル

  • 2017/07/10 12:03

    ちゃんと読んでますか?だから先に書いた通り編集者権限に”manage_options”の権限を与えれば良いだけです。
    ”manage_options”を探してチェックしてください。
    画像を追加したのでよく確認してください。
    もし”manage_options”が存在しないのなら別の部分に問題があるんでしょうが、その場合は分かりません。

    キャンセル

  • 2017/07/10 12:11

    >”manage_options”を探してチェックしてください
    すでにチェックしています。

    キャンセル

0

実際に検証していないので間違っていたらすみません。

①管理画面でのみ追加しているのを変更する案

以下の2行が、原因なのではないかと思われます。

add_action( 'admin_menu', 'first_order_add_add_admin_menu' );
add_action( 'admin_init', 'first_order_add_settings_init' );

それぞれ、admin_menu、admin_initというアクションの時に、
first_~が行われるという内容です。
admin_menu、admin_initは共に管理画面のアクションです。
そのため、管理者権限の場合にのみ行われます。

『First Order Discount』のサブメニューへの表示は、
admin_menuに紐づいているので、管理者権限で表示されています。

widgets_initか、initに変えたら管理者権限以外でも表示されるようになると思います。

②編集者権限にプラグインへのアクセスを許可する案

以下を追加することで、権限を取得して、
編集者権限に対して、プラグインを許可する方法です。

function add_theme_caps(){
    $role = get_role( 'editor' );
    $role->add_cap( 'activate_plugins' );
}
add_action( 'admin_init', 'add_theme_caps' );

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.12%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる