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

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

新規登録して質問してみよう
ただいま回答率
85.48%
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

1回答

3652閲覧

編集権限以下の場合、固定ページの一覧から任意の項目を非表示にしたい

akkkkin

総合スコア83

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2017/04/19 07:54

編集2017/04/19 08:09

掲題の件で質問です。

編集権限以下のみ固定ページの一覧の一部のページ項目だけ非表示にする場合、
どのように設定すればいいのでしょうか?(例えば下記の赤枠内の項目だけ非表示にする)

イメージ説明

ちなみに固定ページ一覧からは非表示にするのですが、
サイト上には非表示にした固定ページは表示されている状態です。

【やったこと】
ググったところ、CSSに記述すると非表示になるとのことだったので、
設定しましたが、非表示になりませんでした(そもそもこれですと権限は関係ありませんが)。

/* 一部の投稿IDで非表示ID71の場合*/ .post-77 .entry-title { display: none; } /*一部の投稿IDで非表示 ID71の場合*/ .page-id-71 .entry-title { display: none; } .postid-71 .entry-title { display: none; }

もし、詳しい方がいらっしゃればご教示いただきたく思います。

何卒よろしくお願いします。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

pre_get_postsアクションを用いて、
(1)管理画面の固定ページ一覧の時
(2)ログインユーザーの権限をチェックして
(3)特定の権限がなければ
(4)特定の固定ページを除外する
のような具合で設定すればいけるように思います。

https://wpdocs.osdn.jp/%E3%83%97%E3%83%A9%E3%82%B0%E3%82%A4%E3%83%B3_API/%E3%82%A2%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3%E3%83%95%E3%83%83%E3%82%AF%E4%B8%80%E8%A6%A7/pre_get_posts

投稿2017/04/19 14:12

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

akkkkin

2017/04/20 02:33 編集

コメントありがとうございます。 function.phpに下記のコードを記載したところ、任意の固定ページ(918,883)が非表示にならなかったのですが、間違っているのでしょうか? function search_filter( $query ) { $user = new WP_User( get_the_author_meta( 'ID' ) ); if ( !is_admin() && $query->is_page() ) { if (!current_user_can('administrator')) { $query->set( 'post__not_in', array( 918, 883 ) ); } } } add_action( 'pre_get_posts','search_filter' ); 何卒よろしくお願いいたします。
退会済みユーザー

退会済みユーザー

2017/04/20 03:08

> if ( !is_admin() && $query->is_page() ) { これだと条件が逆ではないでしょうか。
akkkkin

2017/04/20 03:14

ありがとうございます。 if (is_admin() && $query->is_page() ) { と修正しました。 しかし、非表示になりません。。。
退会済みユーザー

退会済みユーザー

2017/04/20 03:40

管理画面は固定ページではないような……
退会済みユーザー

退会済みユーザー

2017/04/20 03:42

if文の内側に、 echo "通過!"; die(); と入れておけば、この処理が通ったところでPHPの処理が止まるので、デバッグしやすいです。
akkkkin

2017/04/20 04:11

コメントありがとうございます。 >管理画面は固定ページではないような…… 管理画面の固定ページという意味の記述なのですが・・・ >if文の内側に、 >echo "通過!"; >die(); 記述しました。 function search_filter( $query ) { $user = new WP_User( get_the_author_meta( 'ID' ) ); if (is_admin() && $query->is_page() ) { echo "通過!"; die(); if (!current_user_can('administrator')) { $query->set( 'post__not_in', array( 918, 883 ) ); } } } add_action( 'pre_get_posts','search_filter' ); しかし、何も表示されませんでした。
akkkkin

2017/04/20 04:54 編集

色々試行錯誤しまして、下記のコードにしたところ、任意の固定ページは非表示になりました。 function search_filter( $query ) { $user = new WP_User( get_the_author_meta( 'ID' ) ); $pages = get_pages( $args ); if ($pages != 'administrator') { $query->set( 'post__not_in', array( 918, 883, 882, 884, 210) ); } } add_action( 'pre_get_posts','search_filter' ); しかし、権限関わらずすべてのユーザーグループが非表示になります・・・
akkkkin

2017/04/20 06:16

下記の記述でも、どの権限も指定した固定ページの項目が非表示になります。 function search_filter( $query ) { $user = new WP_User( get_the_author_meta( 'ID' ) ); if($user != 'administrator'){ $query->set( 'post__not_in', array( 918, 883, 882, 884, 210) ); } } add_action( 'pre_get_posts','search_filter' );
退会済みユーザー

退会済みユーザー

2017/04/20 07:19

WP_Userの使い方が間違っていると思います。WP_Userのマニュアルには目を通されていますか。 https://wpdocs.osdn.jp/%E3%82%AF%E3%83%A9%E3%82%B9%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/WP_User また、今の場合はwp_get_current_user()を使えるはずです。 wp_get_current_user()でログインユーザーのWP_Userオブジェクトを取得し、そのrolesで必要な権限を持っているか判定してください。
akkkkin

2017/04/20 08:10 編集

コメントありがとうございます。 なるほどです。下記で非表示にできました。 function search_filter( $query ) { $user = wp_get_current_user(); if(!$user->has_cap('administrator')){ $query->set( 'post__not_in', array( 918, 883, 882, 884, 210, 881, 318) ); } } add_action( 'pre_get_posts','search_filter' ); ただ、項目を非表示したページは管理者権限以外でログインしてサイト表示させると「ページがみつかりませんでした」とサイト自体も表示されなくなります。 例えば、固定ページの項目を非表示に設定している918, 883, 882, 884, 210, 881,318のページは編集権限でログインしてサイト表示させても「ページがみつかりませんでした」とサイト自体も表示されなくなります。 ログアウトしてサイト表示しても同様です。 逆に管理者権限でログインすると、918, 883, 882, 884, 210, 881,318の固定ページはサイト表示されます。
退会済みユーザー

退会済みユーザー

2017/04/20 08:10

管理画面かどうかの判定がないからではないでしょうか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問