7

各サイトにページを作成できるユーザーがインストールされたwp-networkがあります。

これらの各ページはプライマリメニューに配置され、このすべてのメニューを作成する権限を持っているのは1人のユーザーだけです。

ページのコンテンツのみを編集できるユーザーを作成し、タイトルは編集できないようにしたい。

特定のユーザーの管理メニューから、または(はるかに優れた)機能の場合、編集するページのタイトルを無効にするにはどうすればよいですか?

可能性だけを考えました。それは、admin cssを編集してタイトルのテキストボックスを非表示にすることですが、2つの問題があります。

  1. 私はCSSをするのが好きではありません-物事を隠す。
    1. admincssがどこにあるのかわかりません。
    2. 私はphpを知っていますが、機能の要素にcsshideを追加する方法がわかりません。

どうすればいいですか

4

2 に答える 2

9

div#titledivを非表示にするには、必ずCSSを使用する必要があります。フォームの送信や検証などが引き続きスムーズに機能するように、タイトルをマークアップに表示する必要があります。

このソリューションを実装するために知っておく必要のあるいくつかの要素:

  1. current_user_can()は、現在ログインしているユーザーに機能またはロールがあるかどうかをテストするブール関数です。
  2. admin_headアクションを使用して、または別のCSSファイルに保存する場合はwp_enqueue_styleを使用して、スタイルをインラインで追加できます。

これがその仕事をするコードスニペットであり、あなたが適切だと思う場所にそれを配置し、テーマのfunctions.phpが機能します。ネットワークでさまざまなテーマを使用している場合は、ネットワークでアクティブ化されるプラグイン内に配置します。

<?php

add_action('admin_head', 'maybe_modify_admin_css');

function maybe_modify_admin_css() {

    if (current_user_can('specific_capability')) {
        ?>
        <style>
            div#titlediv {
                display: none;
            }
        </style>
        <?php
    }
}
?>
于 2012-04-04T19:04:28.577 に答える
-2

私は問題を解決しました。誰かが検索エンジンを使用してここに来た場合、私は解決策を投稿します。

調べてみると、タイトルのテキストボックスが挿入されるコードの部分を見つけ、ユーザーが特定の機能を持っているかどうかを知る関数を見つけました。

タイトルテキストボックスが追加されるファイルは/wp-admin/edit-form-advanced.phpです。これはテキストボックスの前の行です

if ( post_type_supports($post_type, 'title') )

これに変更しました

if ( post_type_supports($post_type, 'title') and current_user_can('edit_title') )

このように、テキストボックスは、ユーザーが「edit_title」と呼ばれる機能を持っている場合にのみ追加されます。

このIFブロックが数行後に終了すると、次のように追加しました。

else echo "<h2>".esc_attr( htmlspecialchars( $post->post_title ) )."</h2>";

ユーザーが「edit_title」機能を持っていない場合に、ページタイトルを表示するが編集はしない。

次に、ユーザーの機能と役割を編集するためのプラグインを既にインストールしました。これは、新しい機能(edit_title)を作成し、それを目的の役割に割り当てるのに役立ちます。

于 2012-04-05T22:46:58.253 に答える