フォーラムへの返信

9件の返信を表示中 - 1 - 9件目 (全9件中)
  • フォーラム: 使い方全般
    返信が含まれるトピック: セキュリティ向上:ログインIDをURLにしたくない
    トピック投稿者 yoshik

    (@yoshik)

    > popup様
    ご回答頂きありがとうございます。

    Firebugのログも

    存在するユーザー番号のGETでステータス302
    404.phpのGETでステータス404

    となっていたので安心です。

    正規表現が「#^/author/.+#」となっていましたが
    「#/author/.+#」かなと思い以下のように致しました。

    /*
    	投稿者アーカイブ非表示化
    	設置方法:
    	テーマのfunction.phpに以下の処理を書き込む
    	有効化方法:
    	書き込み後、パーマリンク設定を何も変更せず「変更を保存」を押下する。
    */
    
    //投稿者アーカイブを空欄化
    add_filter( 'author_rewrite_rules', '__return_empty_array' );
    //URLを非表示化
    function disable_author_archive() {
    	if( $_GET['author'] || preg_match('#/author/.+#', $_SERVER['REQUEST_URI']) ){
    		wp_redirect( home_url( '/404.php' ) );
    		exit;
    	}
    }
    add_action('init', 'disable_author_archive');

    WordPressっぽい書き方で、私の発想より非常にカッコイイです。
    ありがとうございました。
    解決とさせて頂きます。

    フォーラム: 使い方全般
    返信が含まれるトピック: セキュリティ向上:ログインIDをURLにしたくない
    トピック投稿者 yoshik

    (@yoshik)

    > nobita様

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

    下準備:

    add_filter( 'author_rewrite_rules', '__return_empty_array' );

    をコメントアウトして
    管理画面でパーマリンク設定画面からなにも変更せずに「変更を保存」を押下し投稿者アーカイブを生成致しました。
    存在してない状態で確認したところログイン・ログアウト共にURLが表示されました。

    使用中のテーマに「author.php」がなかったのでその中身を
    (author.phpがないのでarchive.phpで表示している様子)

    <html>
    <?php
    if ( ! is_user_logged_in() ) {
    wp_redirect( home_url( '/404.php' ) );
    exit;
    }
    ?>
    みーたーなー
    </html>

    としてみました。

    検証内容は以下の通りです。

    ログイン中で
    http://WordPressのURL/?author=存在するユーザー番号と入力すると
    http://WordPressのURL/author/該当アーカイブへ(みたなと表示)

    http://WordPressのURL/?author=存在しないユーザー番号と入力すると
    http://WordPressのURL/?author=存在しないユーザー番号で404

    ログアウトした状態で
    http://WordPressのURL/?author=存在するユーザー番号と入力すると
    404.phpにへリダイレクトしました。

    しかし、FireFoxのFirebugでネットのログを見ると

    存在するユーザー番号のGETでステータス301
    ユーザーIDのGETでステータス302
    404.phpのGETでステータス404

    となりました。

    内部犯行はともかく、外部犯行は気がつけば分かるという感じでしょうか。

    先の「author」決め打ちの場合は、FirebugでユーザーIDのログは出ませんでした。
    is_user_logged_in()は初めて触ったので非常に面白かったです。
    ありがとうございました。

    フォーラム: 使い方全般
    返信が含まれるトピック: セキュリティ向上:ログインIDをURLにしたくない
    トピック投稿者 yoshik

    (@yoshik)

    > popup様
    ご回答頂きありがとうございます。
    以下の内容で試してみました。

    add_filter( ‘author_rewrite_rules’, ‘__return_empty_array’ );

    をfunctions.phpに追加。
    管理画面でパーマリンク設定画面からなにも変更せずに「変更を保存」を押下

    404は表示されるようになったのですがログイン名がURLにでてしまいました。
    出来ましたらURLもID番号のままで表示してくれるとありがたいと思っています。

    フォーラム: 使い方全般
    返信が含まれるトピック: セキュリティ向上:ログインIDをURLにしたくない
    トピック投稿者 yoshik

    (@yoshik)

    先ほどの自己レスを書き終わった後に思いつきました。

    「getでauthorまでは決め打ちなんだからその人たちを一括で面倒見れば存在してもしなくても同じ動作では?」

    以下のサイトの

    WP:特定のGETパラメータが渡されたら404を返す – 日々平穏
    http://www.heion.net/web/wordpress/get404/

    コードを参考にしました。

    if($_GET["itemid"]){
    	header("HTTP/1.0 404 Not Found");
    	include '404.php';
    	exit;
    }

    これを以下のように変更し

    if($_GET["author"]){
    	header("HTTP/1.0 404 Not Found");
    	include '404.php';
    	exit;
    }

    テーマの下のfunction.phpに追記しました。

    対応方法としましてはWordPressぽくないといいますか、おしゃれじゃない気もしますが要望は満たせてます。

    .htaccessでやってしまうとサーバ環境によっては有効化されてない場合もあります。
    WordPressのシステム内で話を完結させたほうがのちのち良いかなと思ってます。

    他に解決方法がありましたら教えて頂けると幸いです。

    フォーラム: 使い方全般
    返信が含まれるトピック: セキュリティ向上:ログインIDをURLにしたくない
    トピック投稿者 yoshik

    (@yoshik)

    解決の一歩手前です。

    以下のサイトの解答の

    url rewriting – Remove author prefix on WordPress – Stack Overflow
    http://stackoverflow.com/questions/3629323/remove-author-prefix-on-wordpress

    二番目のコードを参考にしました。

    add_filter('author_link', 'no_author_base', 1000, 2);
    function no_author_base($link, $author_id) {
        $link_base = trailingslashit(get_option('home'));
        $link = preg_replace("|^{$link_base}author/|", '', $link);
        return $link_base . $link;
    }

    これを以下のように変更し

    add_filter('author_link', 'no_author_base', 1000, 2);
    function no_author_base($link, $author_id) {
    // ?authorのURLがきたら
        $link_base = trailingslashit(get_option('home'));
    // サイトトップにスラッシュを付けてかえす
        return $link_base . "404.php";
    // 返されたものに404をつけ再度かえす
    }

    使用中のテーマの下のfunction.phpに追記しました。

    動きとしましては
    「http://WordPressのURL/?author=1」といわれたら「http://WordPressのURL/404.php」にとばします。

    弱点としましては
    入力されたユーザー番号がアカウントとして存在するものは404.phpへ移動します。
    存在しないユーザー番号を入れられた場合はURLがそのままで404を表示します。
    なので、総当りをされたら有効なユーザー番号は何番かはわかってしまいます。

    そのユーザー番号が有効なのか無効なのかさえもわからないほうが良いかなと思っています。
    この対応でも良いといえば良いのですがもう一声頑張ってみたいと思っています。

    エレガントな解決方法がありましたら教えて頂けると幸いです。

    トピック投稿者 yoshik

    (@yoshik)

    解決にします

    トピック投稿者 yoshik

    (@yoshik)

    ありがとうございます。
    無事思った通りの動きをしてくれました。

    それにしてもこんな設定でいいとは思いつきませんでした。
    いい勉強になりました。

    トピック投稿者 yoshik

    (@yoshik)

    > ひじりさま
    ご回答頂きありがとうございます。

    検証してみましたがダメでした。

    ちなみにWP_Queryは計5回使っています。
    それぞれのループに「wp_reset_query();」を入れています。

    4回目に先頭固定を指定した指定カテゴリのループを表示し
    5回目で先頭固定を指定したカテゴリ除外のループを回しております。

    5回目だけが4回目のデータを引き継いでいるというか
    引数を無視して動いている状況です。

    トピック投稿者 yoshik

    (@yoshik)

    自己解決致しました。
    データがとれていないのではなく取れすぎて困っているので
    要らないデータはすっ飛ばす方向に方針転換してみました。

    while( have_posts() ) :
    the_post();
    if (!in_category('65')){
    echo '<h2><a href="';
    echo the_permalink();
    echo '"<'. get_the_title().'</a></h2>';
    echo the_content('read more...');
    }
    endwhile;

    のように「!in_category(’65’)」と指定すればいらないカテゴリ以外を表示する事が可能です。
    もっと綺麗な対処の方法があればいいのですが・・・。

    おすすめの方法がありましたらお知らせ頂けると幸いです。

9件の返信を表示中 - 1 - 9件目 (全9件中)