• 解決済 roses

    (@roses)


    トップページに下記のような感じで、一般に公開している記事と非公開の記事を混在させて表示させています。
    ログインしていなくてもタイトルリンクが表示されている状態です。

    <h2>更新状況</h2>
    <?php
    $posts = get_posts('numberposts=10&post_type=any&post_status=publish,private&orderby=modified&exclude='.EXCLUDE);
     if ($posts) {
    ?>
    	<ul>
    	<?php foreach($posts as $post): setup_postdata($post); ?>
    	    <li><?php the_time('Y年m月d日'); ?> <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
    	<?php endforeach; ?>
    	</ul>
    <?php
     }
    ?>

    ログインしてない人が非公開記事にアクセスすると404.phpの「ページが見つかりません」が表示されますが、ログインすれば見れるので404.phpの代りにログインを促すページを表示させることは出来るでしょうか?

    どなたかご教授いただければありがたいです。
    よろしくお願いいたします。

7件の返信を表示中 - 1 - 7件目 (全7件中)
  • こんにちは

    練習で作ってみました。動きますか?

    404.phpで

    <?php
    /**
     * The template for displaying 404 pages (Not Found).
     *
     * @package WordPress
     * @subpackage Twenty_Ten
     * @since Twenty Ten 1.0
     */
    get_header(); ?>
    
    	<div id="container">
    		<div id="content" role="main">
    <?php
    $q = get_query_var("p");
    
    	global $wpdb;
    	$status = $wpdb->get_results("SELECT <code>post_status</code> FROM $wpdb->posts WHERE ID = $q");
    
    if($status[0]->post_status == "private"){
    ?>
    			<div id="post-0" class="post error404 not-found">
    				<h1 class="entry-title"><?php _e( 'This entry is a closed-door.', 'twentyten' ); ?></h1>
    				<div class="entry-content">
    					<form method="post" action="<?php echo wp_login_url() ?>?redirect_to=<?php echo esc_attr($_SERVER['REQUEST_URI']) ?>">
    					<dl><dt><label for="login_username">ユーザー名:</label></dt>
    						<dd style="margin-bottom:0"><input type="text" name="log" id="login_username" value="" /></dd>
    
    					<dt><label for="login_password">パスワード:</label></dt>
    						<dd style="margin-bottom:0"><input type="password" name="pwd" id="login_password" value="" /></dd>
    					<dd style="margin-top:0"><input type="submit" value="ログイン" /></dd>
    					</dl>
    					</form>
    				</div><!-- .entry-content -->
    			</div>
    		</div><!-- #content -->
    	</div><!-- #container -->
    <?php
    }else{
    ?>
    			<div id="post-0" class="post error404 not-found">
    				<h1 class="entry-title"><?php _e( 'Not Found', 'twentyten' ); ?></h1>
    				<div class="entry-content">
    					<p><?php _e( 'Apologies, but the page you requested could not be found. Perhaps searching will help.', 'twentyten' ); ?></p>
    					<?php get_search_form(); ?>
    				</div><!-- .entry-content -->
    			</div><!-- #post-0 -->
    
    		</div><!-- #content -->
    	</div><!-- #container -->
    
    	<script type="text/javascript">
    		// focus on search field after it has loaded
    		document.getElementById('s') && document.getElementById('s').focus();
    	</script>
    
    <?php
    }
    get_footer(); ?>

    トピック投稿者 roses

    (@roses)

    nobitaさん こんにちは

    ご回答ありがとうございます。

    頂いた内容を404.phpに入れてみたのですが、「ページが見つかりません」と表示されてログインフォームは表示されませんでした。

    すみません

    コードを貼り付けた時にバックスラッシュを使ったため、変な書き方になってしまいました。

    select文を以下のものと置き換えてください。

    $status = $wpdb->get_results("SELECT post_status FROM $wpdb->posts WHERE ID = $q");

    訂正:バックスラッシュ→バッククウォート

    トピック投稿者 roses

    (@roses)

    nobitaさん、コードありがとうございます。

    でも、select文を置き換えてみたのですが、やはりログインフォームは表示されません(汗

    残念です。

    私も、以前未公開エントリの処理に疑問があり、同じような疑問を持つ人がいたので、これを機会に、手をつけてみようと思いましたが、力が足りませんでしたね

    私の環境では、未公開文書の投稿を開くと、ログインフォームが表示され、ログインすると、その投稿が表示されます。

    テーマはtwentytenを使っています。

    トピック投稿者 roses

    (@roses)

    nobitaさん こんにちは

    何度もありがとうございました。

    私もtwentytenを使っています。
    nobitaさんの方では動いているとのことなので、もう一度設定など見直してがんばってみます!

    取り合えず、「非公開」設定を止めて、代わりに非公開にしたい記事だけ

    <?php if(is_user_logged_in()): ?>
    ログインしています
    <?php else: ?>
    ログインしていません
    <?php endif; ?>

    この条件分岐でログインフォームを表示させることにしました。

    今回はお付き合いいただきありがとうございました。
    一先ず、解決とさせていただきます。

7件の返信を表示中 - 1 - 7件目 (全7件中)
  • トピック「非公開記事へアクセスした時の動作について」には新たに返信することはできません。