私は彼の従業員のために内部の「イントラネット」を望んでいる顧客のためにワードプレスサイトに取り組んでいます。基本的なニーズは以下のとおりです。
この情報は機密情報であり、従業員のみを対象としています。彼らは、各従業員にユーザー名/パスワードを与え、ログインした後にのみ情報と文書を閲覧できるようにしたいと考えています。
私はこれらのプラグインを見ました、そしてそれのようなものがいくつかありますが、それらは限られているように見え、そしてもちろんそれらは現在完全に時代遅れです:
個々の投稿/ページをパスワードで保護することができます。カテゴリの投稿全体をパスワードで保護できますか、それともカスタム投稿タイプを保護できますか?基本的に、私はログインの下で一緒にいくつかのページ/投稿をグループ化する必要があります。情報は機密性が高いため、RSSフィードなどでは利用できません。これどうやってするの?
結論:WAYの方が簡単な場合はオプション1に興味がありますが、オプション2の方が望ましいでしょう。どちらかを引き離す方法。ご協力いただきありがとうございます!
対応するアーカイブページとシングルページにチェックを入れることができます
しかし、他のすべての解決策と一緒に確実にしなければならないことの1つは、the_posts
フィルターを使用することです。 WP_Queryが取得した投稿を除外します。あなたは投稿オブジェクトの配列を取得します。条件を確認し、オブジェクトが存在する場合は設定を解除します。これは他のすべての解決策が迂回される場合のためのものです。何も知らないプラグインが投稿を取得した場合、これが最後の手段になります。
あなたが使用すべきもう一つのことは、クエリ変数をチェックし、必要に応じてそれらを変更するためのpre_get_posts
フィルタです。
もう1つはposts_where
フィルタです。これを使用して、mysqlクエリに別のwhere句を追加します。
これは完全に安全というわけではありませんが、ほとんどの場合、さらにはほとんどの外部プラグインもカバーするはずです。
カスタム投稿タイプを使用すると、ずっと簡単になります。そのpost_typeにカスタム機能を設定して、特定の役割を持つユーザーにのみそれらの機能を付与することができます。
あなたはあなたのクライアントに手動で全ての投稿をプライベートに設定するように依頼することができますが、あなたは彼らが今それを忘れていることを確信できます。セキュリティが重要な場合は、それを避けてください。
これは古いです - しかし、ここで私はこの問題を最終的にどのように解決したかです。
これをカスタマイズして、特定のユーザーだけに許可することができます。たとえば、@ Membersに記載されている "Members"プラグインを使用します。
コード:
functions.php /
/* Require Authentication for Intranet */
function my_force_login() {
global $post;
if (!is_user_logged_in()) {
auth_redirect();
}
}
page-intranet.phpとsingle-intranet-pages.phpの先頭に
<?php my_force_login(); ?>
以上です。それは働いています。
セキュリティ上の注意
あなたがより安全なこれのための簡単な方法があるならば、それを下に残してください、そして、私はそれを答えとしてマークします。
特定のページでコンテンツの表示/非表示を非公開に設定できます。これにより、訪問者はコンテンツを表示するためのWordPressログインおよびアクセス許可レベルを持つ必要があります。私がお勧めするのは、 "イントラネット"ページ用のtemplate-intranet.php
を作成し、イントラネットの一部であるページ用のカスタムメニューを追加して、そのページにリストできるようにすることです。それでも、すべてのページのステータスを非公開に設定する必要があります。
すべてのイントラネットページを非公開にするための回避策はfunctions.php
になります。現在のページが「イントラネット」ページのサブページであるかどうかをチェックするための条件文を書くことができます。ユーザーはログインしており、リダイレクトされていない場合は、続行しない場合。
手動で認証を管理し、それをWordPress認証にラップする場合は、@ Rezenが正しいアイデアを持ちます。ただし、認証を確認するには、特定のページテンプレートまたはページテンプレートのリストを使用することをお勧めします。
Justin Tadlockの "Members"プラグインを見ることもできます。おそらく、利用できるカスタムの役割管理がたくさんあります。
フィルタ:
add_filter('template_include', 'theme_check_user_permissions', 1, 1);
add_filter('logout_url','theme_logout_redirect');
if(!current_user_can('edit_users')) add_filter( 'wp_die_handler', create_function('',"return 'theme_wp_die_handler';"));
ユーザーが登録されていない場合は、サイトのログインページにリダイレクトします(guest.php、ダッシュボードなし)。
function theme_check_user_permissions($template)
{
return (is_user_logged_in() ? $template : TEMPLATEPATH.'/guest.php');
}
ログイン後にホームページにリダイレクト
function theme_logout_redirect($url, $redirect = null)
{
return $url.'&redirect_to='.urlencode(get_bloginfo('url'));
}
Wp die pageを削除する(家にリダイレクトする)
function theme_wp_die_handler()
{
wp_redirect(get_bloginfo('url'),307);
exit;
}
これは timshutesの回答を修正したものです - 特定のページにログインを要求し、それらをカスタム投稿タイプにしたくない場合は、functions.phpに追加できます。
add_shortcode('need_login', 'shortcode_needLogin');
function shortcode_needLogin() {
if (!is_user_logged_in()) {
auth_redirect();
}
}
そして、あなたがログインを要求したいページの上部で、あなたはただすることができます:
[need_login]