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

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

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

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

PHP

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

Q&A

解決済

2回答

1784閲覧

会員限定ページの一部を会員なしで見れるようにする

naonao11

総合スコア97

WordPress

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

PHP

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

0グッド

0クリップ

投稿2018/06/28 04:17

編集2018/06/28 05:14

wordpressで会員限定ページを作成しています。urlを打った時、ログイン画面に飛ぶようになっているのですが一部それに除外したページを作成したいのですがうまくいきません・・・

一部例外ページ: sample.php
Template name: sample

functions.php内に以下を書き込みました。

php

1function require_login() { 2 if (! is_page_template( 'sample.php' )) { 3 if ( ! is_user_logged_in() && 4 ! preg_match( '/^(wp-login.php|async-upload.php)/', basename( $_SERVER['REQUEST_URI'] ) ) && 5 ! ( defined( 'DOING_AJAX' ) && DOING_AJAX ) && 6 ! ( defined( 'DOING_CRON' ) && DOING_CRON ) ) { 7 auth_redirect(); 8 } 9 } 10} 11add_action( 'init', 'require_login' );

ご助力のほうよろしくお願いします…

変更点を教えていただいてこのように書きました。

php

1function require_login() { 2 if ( ! is_user_logged_in() && 3 ! array_search( basename( $_SERVER['REQUEST_URI'] ), ['wp-login.php', 'async-upload.php'] ) && 4 ! ( defined( 'DOING_AJAX' ) && DOING_AJAX ) && 5 ! ( defined( 'DOING_CRON' ) && DOING_CRON ) ) { 6 auth_redirect(); 7 } 8} 9add_action( 'init', 'require_login' );

この場合、リダイレクトを繰り返し以下のようなエラーが出ました。

Submitted URI too large! The length of the requested URL exceeds the capacity limit for this server. The request cannot be processed. If you think this is a server error, please contact the webmaster. Error 414

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

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

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

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

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

guest

回答2

0

if ( ! is_user_logged_in() && ! preg_match( '/^(wp-login.php|async-upload.php)/', basename( $_SERVER['REQUEST_URI'] ) ) && ! ( defined( 'DOING_AJAX' ) && DOING_AJAX ) && ! ( defined( 'DOING_CRON' ) && DOING_CRON ) ) {

を、慣れない正規表現なんて使わずに

if ( ! is_user_logged_in() && array_search( basename( $_SERVER['REQUEST_URI'] ), ['wp-login.php', 'async-upload.php'] ) !== FALSE && ! ( defined( 'DOING_AJAX' ) && DOING_AJAX ) && ! ( defined( 'DOING_CRON' ) && DOING_CRON ) ) {

とかしたらどうかな。
array_search()で、ヒットするべきファイル名の配列と比較するっていう。
ヒットしない時はFALSEを返すので、ほしい条件に合わせて !== とか === で適切に。

投稿2018/06/28 04:50

編集2018/06/28 06:37
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

naonao11

2018/06/28 04:56

ありがとうございます!! つまり、ログインが必要ないページについてはarray_search内にそのファイル名を書くということでしょうか。。?
naonao11

2018/06/28 04:57

また教えていただいた方法を試すと Submitted URI too large! と出てきました…
退会済みユーザー

退会済みユーザー

2018/06/28 05:07

質問文にある条件のみで回答できる範囲を回答しています。 そもそもの目的にそぐわない可能性もあります。 ファイル名のマッチングをミスしているとわかったので、その部分だけ指摘しています。 エラーメッセージのみ報告されても、 何をどう変えたのか把握できない以上、 こちらでテストできるわけじゃないので、 がんばってデバッグしてください。 わからなければ、関係するコードすべて掲示するなり、 質問内容を第三者にも分かるように改良してください。 そのエラーメッセージの直接の意味は、 GETリクエストがwebサーバープログラムが解釈できる長さよりも超えているときです。 apacheであれば LimitRequestLine という設定値を大きくすれば改善できますが、 そもそも正しい、処理可能なGETリクエストを送信しているか、 webサーバーのアクセスログを点検するのが先です。
naonao11

2018/06/28 05:15

ありがとうございます、エラーが出たタイミングのところを記載させていただきましたのでご確認のほどよろしくお願いします。。。
退会済みユーザー

退会済みユーザー

2018/06/28 06:35 編集

ア ク セ ス ロ グ を 点 検 す る の が 先 で す 。 アクセスログには、GETリクエストが現れているので、正しいリクエストかどうか確認する最適な方法だと考えます。 あと、リダイレクトを繰り返しているとのことですが、リダイレクトしてしまう条件は確認済みですか?
guest

0

自己解決

php

1function require_login() { 2 if ( 3 strstr( basename( $_SERVER['REQUEST_URI'] ),'sample') || 4 strstr( basename( $_SERVER['REQUEST_URI'] ),'example')) { 5 }else{ 6 if ( 7 ! is_user_logged_in() && 8 ! preg_match( '/^(wp-login.php|async-upload.php)/', basename( $_SERVER['REQUEST_URI'])) && 9 ! ( defined( 'DOING_AJAX' ) && DOING_AJAX ) && 10 ! ( defined( 'DOING_CRON' ) && DOING_CRON )) { 11 auth_redirect(); 12 } 13 } 14 } 15 add_action( 'init', 'require_login' );

URIに'sample'または'example'の値があった時自分が行いたい行動がとれていました。
お騒がせし申し訳ございません。

投稿2018/06/28 06:41

naonao11

総合スコア97

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.51%

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

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

質問する

関連した質問