「wordpress」タグアーカイブ

WordPress BuddyPressカスタマイズメモ 管理画面のサブメニューの非表示。管理者以外

管理者以外は、プラグイン、ユーザーなどのサブメニューを非表示にする

WordPressのSNSプラグイン、BuddyPressを導入すると不特定多数のメンバーが参加することになる。

管理者以外の、編集者や投稿者には、非表示にしておきたいメニューがある。

管理画面の一部のメニューを非表示にするで、メニューごと非表示にする方法は商会した。

今回はサブメニューだけを非表示にする方法。

functions.php へ記述

//管理画面のサブメニューの非表示(管理者以外)

if (!current_user_can('administrator')) {
function remove_submenus() {
// remove_submenu_page('index.php', 'index.php'); // ダッシュボード -> ホーム
// remove_submenu_page('index.php', 'update-core.php'); // ダッシュボード -> 更新
// remove_submenu_page('edit.php', 'edit.php'); // 投稿 -> 投稿一覧
// remove_submenu_page('edit.php', 'post-new.php'); // 投稿 -> 新規追加
// remove_submenu_page('edit.php', 'edit-tags.php?taxonomy=category'); // 投稿 -> カテゴリ
// remove_submenu_page('edit.php', 'edit-tags.php?taxonomy=post_tag'); // 投稿 -> タグ
// remove_submenu_page('upload.php', 'upload.php'); // メディア -> ライブラリ
// remove_submenu_page('upload.php', 'media-new.php'); // メディア -> 新規追加
// remove_submenu_page('link-manager.php', 'link-manager.php'); // リンク -> すべてのリンク
// remove_submenu_page('link-manager.php', 'link-add.php'); // リンク -> 新規追加
// remove_submenu_page('link-manager.php', 'edit-tags.php?taxonomy=link_category'); // リンク -> リンクカテゴリー
// remove_submenu_page('edit.php?post_type=page', 'edit.php?post_type=page'); // 固定ページ -> 固定ページ一覧
// remove_submenu_page('edit.php?post_type=page', 'post-new.php?post_type=page'); // 固定ページ -> 新規追加
// remove_submenu_page('themes.php', 'themes.php'); // 外観 -> テーマ
// remove_submenu_page('themes.php', 'widgets.php'); // 外観 -> ウィジェット
// remove_submenu_page('themes.php', 'theme-editor.php'); // 外観 -> テーマ編集
// remove_submenu_page('plugins.php', 'plugins.php'); // プラグイン -> インストール済みプラグイン
// remove_submenu_page('plugins.php', 'plugin-install.php'); // プラグイン -> 新規追加
// remove_submenu_page('plugins.php', 'plugin-editor.php'); // プラグイン -> プラグイン編集
// remove_submenu_page('users.php', 'users.php'); // ユーザー -> ユーザー一覧
// remove_submenu_page('users.php', 'user-new.php'); // ユーザー -> 新規追加
// remove_submenu_page('users.php', 'profile.php'); // ユーザー -> プロフィール
// remove_submenu_page('tools.php', 'tools.php'); // ツール -> 利用可能なツール
// remove_submenu_page('tools.php', 'import.php'); // ツール -> インポート
// remove_submenu_page('tools.php', 'export.php'); // ツール -> エクスポート
// remove_submenu_page('options-general.php', 'options-general.php'); // 設定 -> 一般
// remove_submenu_page('options-general.php', 'options-writing.php'); // 設定 -> 投稿設定
// remove_submenu_page('options-general.php', 'options-reading.php'); // 設定 -> 表示設定
// remove_submenu_page('options-general.php', 'options-discussion.php'); // 設定 -> ディスカッション
// remove_submenu_page('options-general.php', 'options-media.php'); // 設定 -> メディア
// remove_submenu_page('options-general.php', 'options-privacy.php'); // 設定 -> プライバシー
// remove_submenu_page('options-general.php', 'options-permalink.php'); // 設定 -> パーマリンク設定
}
add_action('admin_menu', 'remove_submenus', 102);
}

「//」を頭につけると、コメントアウトなので、メニューからは削除されない。

上の例でいくと、「ユーザー一覧」を非表示にしたいなら、

// remove_submenu_page('users.php', 'users.php'); // ユーザー -> ユーザー一覧

  ↓

 remove_submenu_page('users.php', 'users.php'); // ユーザー -> ユーザー一覧

と、頭の//を削除すればいい。

管理者でメニューを削除したくない場合は、一番上と一番下の

if (!current_user_can('administrator')) {

}

を削除すればいい。

 

メニューを非表示にしている場合は、サブメニューも強制非表示

例えば、メニューの「ユーザー」を

remove_menu_page('users.php');

で非表示にしている場合は、

remove_submenu_page('users.php', 'users.php');
remove_submenu_page('users.php', 'user-new.php');
remove_submenu_page('users.php', 'profile.php');

と書いていなくても、

「ユーザー」のサブメニューである
ユーザー -> ユーザー一覧
ユーザー -> 新規追加
ユーザー -> プロフィール

の3個は強制的に非表示になる。

この記事も読まれています

WordPress BuddyPressカスタマイズメモ 管理画面の一部のメニューを非表示にする。管理者以外

管理者以外は、プラグイン、ユーザーなどのメニューを非表示にする

WordPressのSNSプラグイン、BuddyPressを導入すると不特定多数のメンバーが参加することになる。

管理者以外の、編集者や投稿者には、非表示にしておきたいメニューがある。

ついでに、プラグインで追加されるメニューも、非表示にしたい。

functions.php へ記述

//管理画面の左のメニュー非表示

if (!current_user_can('administrator')) {
function remove_menus() {
  remove_menu_page('index.php'); // ダッシュボード
  remove_menu_page('separator1'); // セパレータ1
// remove_menu_page('edit.php'); // 投稿
// remove_menu_page('upload.php'); // メディア
  remove_menu_page('link-manager.php'); // リンク
// remove_menu_page('edit.php?post_type=page'); // 固定ページ
// remove_menu_page('edit-comments.php'); // コメント
  remove_menu_page('separator2'); // セパレータ2
  remove_menu_page('themes.php'); // 外観
  remove_menu_page('plugins.php'); // プラグイン
// remove_menu_page('users.php'); // ユーザー
  remove_menu_page('tools.php'); // ツール
  remove_menu_page('wpcf7');//plug-in contact form7
// remove_menu_page('options-general.php'); // 設定
// remove_menu_page('profile.php'); // プロフィール(管理者以外のユーザー用)
}
add_action('admin_menu', 'remove_menus');
}

「//」を頭につけると、コメントアウトなので、メニューからは削除されない。

上の例でいくと、例えば、「ユーザー」も非表示にしたいなら、

// remove_menu_page('users.php'); // ユーザー

  ↓

 remove_menu_page('users.php'); // ユーザー

と、頭の//を削除すればいい。

 

プラグインで追加されたメニューを非表示にする方法

プラグインで追加されたメニューを削除するための引数(例えば、wpcf7 みたいな)を確認したいのであれば、

管理バーに追加されたメニューの場合は

global $wp_admin_bar;

の直後に

var_dump( $wp_admin_bar );

と記入したら見えるので、確認できる。

サイドに追加されたメニューの場合は

global $submenu;

の直後に

var_dump( $submenu );

でOK。

引数が分かれば、

remove_menu_page('調べた引数');

で非表示にできる。

WordPress BuddyPressカスタマイズメモ 個別記事ページのコメントの編集ボタンを削除

ログイン中でもコメント編集ボタンを非表示

<追加したい機能>

WordPressのSNSプラグイン、BuddyPressを導入すると不特定多数のメンバーが参加することになる。

管理者以外では、編集者や投稿者であってもコメントの編集権限を剥奪したい。

ただし、自分自身のコメントの編集権は残したいので、全ての権限を剥奪はしない。

管理画面だけでなく、サイトフロントからも編集できるので、この「編集」リンクを削除する。
 

functions.php へ記述

//個別記事ページのコメント編集ボタンを削除

if (!current_user_can('administrator')) {
  add_filter( 'edit_comment_link', '__return_false');
}

管理者でも編集権を剥奪したいのであれば、

if (!current_user_can('administrator')) {

}

を消して、中の1行だけを記述しておけばOK。

WordPress BuddyPressカスタマイズメモ ログイン直後に管理画面ではなくサイトフロントへ飛ばす

WordPressでログイン直後に管理画面ではなく、トップページへ飛ばす方法

<追加したい機能>

WordPressのSNSプラグイン、BuddyPressのメンバーは、管理画面からだけでなく、サイトフロント(トップページとか)のログインウィジェットからログインする場合もある。

なので、ログイン後に管理画面に飛ばさず、そのままホームぺージ(サイトフロント)にとどまってもらいたい。
 

functions.php へ記述

//ログイン後もサイトフロントへ飛ばす

function login_redirect_page() {
 return home_url();
}
add_filter('login_redirect', 'login_redirect_page');
}

これで、login_redirect のフィルターに home_url を返すように設定するだけでいい。

なお、一般ユーザーではなく、管理者は管理画面に直接飛ばしたい場合は、

if ( ! current_user_can( 'administrator' ) ) {

}

で全体を囲めばOK。

WordPress BuddyPressカスタマイズメモ – サイトフロントのアドミンバー非表示

WordPress(BuddyPress)でユーザー登録した一般ユーザー(投稿者権限)で、管理バー(Adminバー)を非表示にする

<実現したい機能>

・WordpressのSNSプラグイン、BuddyPressのメンバーで、ユーザー登録した一般ユーザー(投稿者権限)にはサイトフロントで管理バーを表示させない。

・管理者としてログインしてる時は見えていていい。

 

functions.php へ記述

サイトフロントでのアドミンバーの非表示は、functions.php に1行書くだけでOK。

if ( ! current_user_can( 'administrator' ) ) { //管理者以外
  add_filter( 'show_admin_bar', '__return_false' );//サイトのアドミンバー非表示
}

管理者でも非表示したいのであれば、

if ( ! current_user_can( 'administrator' ) ) {

}

を削除して、真ん中の1行だけ書いておけばいい。

BuddyPressカスタマイズメモ – ユーザーごとのPVランキングを表示するオリジナルWidgetテンプレートを追加する方法

WordPressにオリジナルのサイドウィジェットの xxxx.php を追加する

<追加したい機能>

WordPressのSNSプラグイン、BuddyPressのメンバーのごとに、記事のPV数を集計して、ウィジェットでランキング表示する。

こんなやつ。

 
<追加の流れ>

・ユーザーごとの投稿PV数を集計して表示する xxxx.php を作って、子テーマフォルダに追加。

・phpファイルを呼び出すために、ショートコード my_add を追加する。

・ウィジェットの「テキスト」でショートコードを許可する。

・ウィジェットエリアに「テキスト」を追加し、そこからオリジナルのウィジェットのファイルである xxxx.php を呼び出す
 

ちなみに、プラグインの「PHP Text Widget」を使って、直接ウィジェットの「テキスト」にPHPコードを書く方法もあるが、これはセキュリティ的にヤバイらしいので、やめておこう。

 

オリジナルウィジェット xxxx.phpファイルの中身

Sangoの「人気記事」ウィジェットをベースにユーザーごとに集計したPV数でランキング表示する。

HTML出力の部分を改造すれば、見た目は自由に変えることができる。

xxxx.php の中身

<?php
    $count_key = 'post_views_count'; //著者一覧を取得
    $users =get_users( array('orderby'=>'ID','order'=>'ASC') ); //全著者ループ
    $count_user = array();
    foreach($users as $user) { //処理するユーザー指定
        query_posts( array ( 'author' => $user->ID, 'posts_per_page' => -1 , 'orderby'=>'ID' , 'order'=>'ASC' ) ); //各著者の投稿ループし、アクセス数を計算
        while ( have_posts() ) {
            the_post();
            $post_count = get_post_meta( get_the_ID(), $count_key, true ); //投稿のアクセス数を取得
            if ($post_count <> '') {
                $count_user[$user->ID]=$count_user[$user->ID] + $post_count; //投稿のアクセス数をインクリメント(+1)
            }
        }
    }
    arsort($count_user,SORT_NUMERIC);
    //昇順ソート結果を出力(5個出力の場合)
    $disp_count=5;
    $n=0;
    foreach ($count_user as $userid => $val) {
        $thisUser = get_userdata( $userid );
echo "<ul id=\"members-list\" class=\"item-list\" aria-live=\"polite\" aria-relevant=\"all\" aria-atomic=\"true\"><li class=\"vcard\"><div class=\"item-avatar\"><a href=\"" . home_url() . "/author/" . $thisUser->user_login . "\">" . get_avatar( $userid, 50 ) . "</a></div><div class=\"item\"><div class=\"item-title fn\"><a href=\"" . home_url() . "/author/" . $thisUser->user_login . "\">" . $thisUser->display_name . " さん " . "</a></div></div>";
echo "<div class=\"item views\"><div class=\"item-title fn\"><p class=\"views\"> Total: ". $val . " views" . "</p></div></div></li></ul>"; //HTML出力見た目はSangoのウィジェットに似るように
        $n++;
        if ($n == $disp_count) {break;}
    }
    wp_reset_query();
?>

 

FTPでアップロード

Sangoの子テーマフォルダ(sango-theme-child)の中にtemplateフォルダを作り、その中にオリジナルの xxxx.php をアップロードしておく。

ここでは、wp-content/themes/sango-theme-child/template 。

場所やフォルダ名は、次の functions.php の記述で決めれる。

 

functions.php への記述

ウィジェットでショートコード使用を許可して、自分のショートコード my_add の働きを指定しておく。

add_filter('widget_text', 'do_shortcode'); //サイトフロントのサイドバーにテンプレート追加するため、widgetのテキストでショートコードを使えるように

function Include_my_php($params = array()) {
    extract(shortcode_atts(array(
        'file' => 'default'
    ), $params));
    ob_start();
    include(STYLESHEETPATH . "/template/$file.php"); //子テーマのtemplateフォルダの中のファイルを読み取る
    return ob_get_clean();
} 
add_shortcode('my_add', 'Include_my_php'); //ショートコード my_add を追加

 

ウィジェットの「テキスト」へのショートコードの記述

functions.php で追加したショートコードを使って、「テキスト」ウィジェットでオリジナルのphpを呼び出す。

[my_add file='xxxx']

でOK。 .php は不要。

WordPress BuddyPressカスタマイズメモ 返信メール、メニュー、管理画面、投稿画面など (SANGOテンプレート)

BuddyPressのカスタマイズメモ

基本設定と運用の前提

・BuddyPressでユーザー登録(投稿者として)してもらい、みんなで記事を投稿してもらう

・ユーザー同士は顔見知りじゃないので、それぞれの記事は、管理画面では見えないように

・ユーザー(投稿者権限)の管理画面でのメニューを一部非表示に

・ユーザーの投稿画面で表示オプションを非表示に

・Buddypressのmemberページを使わずに、SangoのAuthorページを活用

・アップデートの通知などをユーザーに見えないように

・コメント時のメール通知などの最適化

・アップデート時に問題が起こらないように、子テーマ化して、コアファイルは極力触らず、functions.phpを使う
 

BuddyPressで実現したカスタマイズ一覧

サイトフロント(ログインせずに見えるWebサイト全て)

・サイドバーにオリジナルWidget、ユーザーごとの記事PVランキング「人気のメンバー」を追加

・サイトフロントのアドミンバー非表示

・ログイン直後に管理画面ではなくサイトフロントへ飛ばす

・サイトフロントのコメントの編集ボタンを削除

 

管理画面全体

・管理画面の一部メニュー非表示

・管理画面のサブメニューの非表示

・管理画面のメニューのアドミンバーの、BuddyPress通知の吹き出しを削除

・管理画面のアドミンバーの通知を消す

・管理画面のアドミンバー内のメニューを非表示

・Wordpressやプラグインのアップデート通知を非表示

・「投稿」→「記事」、「コメント」→「あなたの記事へのコメント」へ、メニューの文言変更

・ダッシュボード画面の「アクティビティ」「クイックドラフト」などを非表示

・管理画面用のCSSファイルを、子テーマ化する

・ログイン時のみCSSを適用させる

・ログイン画面の「W」のロゴを画像に変える

・管理画面のプロフィール項目でいらない部分を消す

 

投稿画面、投稿権限

・記事投稿でタイトルの入力を必須にする

・投稿者の投稿は、自分の投稿のみ表示させる(他ユーザーの投稿は管理画面の記事一覧では見えない)

・自分のもののみの投稿数を取得して、記事数に代入

・upした画像は投稿者本人しか見えないようにする

・投稿画面の不要なオプションを削除

・cssで投稿画面の不要なオプションを非表示に

 

コメント関連

・「あなたのコメント」をメニューに追加

・「あなたのコメント」に投稿者自身が、人の記事に書いたコメントを表示

・「あなたのコメント」の上のコメントメニュー削除

・「あなたのコメント」「あなたの記事へのコメント」の編集権の調整

・「あなたのコメント」に編集権限を与え、「あなたのコメント」に「削除する」だけ残す

・「コメント」に、「あなたの記事へのコメント」のみを表示させる

・コメント数を「あなたの記事へのコメント数」のみカウントする

・「あなたの記事へのコメント」で上のコメントメニュー削除

 

BuddyPressのメンバー機能

・メンバーなどWidget/ウィジェットのURLをリダイレクトさせる

・WidgetのURLの文字列を、別の文字列に置換する

・メンバー登録時の、ユーザー名で禁止文字列を設定する

・メンバーのタイトルの名前に「さん」を追加

・文言変更「登録」→「新規登録」に

 

Sangoのカスタマイズ・バグ修正

・sango のビジュアルエディターのバグ修正(スマホでTinyMCEの文字修飾がおかしい)

・新たなプルダウン(フォントサイズ)追加

・管理画面のプロフィールで、sangoによる追加項目を一旦削除

・管理画面のプロフィールで、Sangoの「肩書」の部分を「出身地」などに変更

 

通知メールのカスタマイズ

・コメント通知メールの差出人(wordpress@yourdomain.com)を変更

・トラックバック、ピンバック、コメントの通知メール内容を変更

 

プラグインのカスタマイズ(子テーマ及びfunctions.phpで)

・Better Notifications for WordPressの設定の問題点を修正するため、管理画面で特定のページの時のみ、jsを上書きする

【解決済】WordPressのセキュリティでロックされ {“error”:”Bad Request”,”message”:”Invalid input.”} と言われて復旧できない時の対処法

WordPressでJetpackを導入している時にロックされた時の対処法

Jetpackのセキュリティ設定の中の「総当たり攻撃からの保護」が原因でログインできなくなる症状が時々報告されている。
 


曰く、
Jetpackがログインページをロックしました。
「お客様のIPアドレス(xx.xx.xx.x)はセキュリティ違反の可能性があるため、フラグが立てられました。ログインのロックを解除するには、特殊リンクをメールで自分自身に送信します。さらに詳しく」

 
と出てきてWordpressの管理者のメールアドレスを入力させられる。

そもそも管理者のメールアドレスなんか覚えてない場合が多い。
覚えてたとして、メールを送信してきても、その「特殊リンク」とやらをクリックすると
 
Google Chromeでは
{“error”:”Bad Request”,”message”:”Invalid input.”}

FireFoxで
error “Bad Request”
message “Invalid input.”

などと表示され、全然ロックを解除できない。
 
解決法は3つあるのでそれぞれ紹介。
 

解決法1:Wordpress.com から IPのセーフリストに追加

 
まず調べると出てくるのは、Wordpressにログインして、管理画面の「総当たり攻撃からの保護」の欄にセーフIPを記入しろと言われる。
しかし、そのログインができねんじゃー!である。

まあ…一時的にスマホを使ってログインしてもいいのだが。

Akismetなどを利用している場合など、高確率で WordPress.com のアカウントを持っているかと思う。

WordPress.com からも同様にセーフリストにIPを記入することができる。

WordPress.com のアカウントなど無い!もしくはあるかもしれんが忘れたわ!という人は無理なので、次の解決法2か3を参照のこと。

まず、Wordpress.com からログインする。

ログイン後、左上の「My Sites」へ移動。


問題のブログが表示されていればOKだが、されていなければ、その下の「Switch Site」で、該当ブログを選択。


下の方の「設定(Settings)」をクリック。


セキュリティ(Security)の中の「総当たり攻撃からの保護(Prevent brute force login attacks)」の下向き矢印をクリックして開く。


ここの「IPアドレスのホワイトリスト(Whitelisted IP addresses)」に自分のIPを記入する。
ちなみに自分のIPはすぐ上に記載されている。

※ここで注意が必要なのだが、JetpackのセキュリティではじかれているIPとこのIPが一致していない場合は、自分のIPではなく、サーバーのIPをはじいている場合がある。
この場合はサーバーのIPのロック画面に記載されている。(xx.xx.xx.x)も合わせて記入しておこう。

これで解決できれば完了。以下の解決法は見なくていい。

WordPress.com のアカウントとブログのリンクがうまくいってない場合は、設定ができない場合もあるので、その時は解決法2か3を試してみること。

 

解決法2:wp-config.phpにセーフIPを記入

 
FTPソフト、またはWebサーバーのファイルが見れる場所から、wp-config.php をダウンロード。

テキストファイルなどで開いて、中ほどの空白行(/* */とか書いてない場所)に下記のコードをコピペして上書きでアップロードしなおす。

define('JETPACK_IP_ADDRESS_OK', 'X.X.X.X');

x.x.x.xの部分を自分のIPにすること。


こんな感じ。色々書いてあるものは、サーバーや環境によって結構違うので、注意されたし。

これでログインできるようになる。

ログインした後は、管理画面から、Jetpackの設定で「総当たり攻撃からの保護」欄のホワイトリストIPに改めて追加しておく方が無難。

※この方法では、wp-config.phpに記載したIPアドレス1個しか、セーフリストに載らない。複雑な環境下などで、複数のIPアドレスを記載する必要がある場合は、下記を参照。

 

解決法3:プラグインのjetpackごと一時無効化

 
色々あって、どうしても無理な場合は最後の手段。

FTPソフトなどで、Webサーバーにつなぎ、wp-content/plugins/jetpack
の「jetpack」のフォルダ名を変更
する。例えば「jetpack_backup」などに。

するとプラグインの読み込み自体がなくなるので、セキュリティ設定も死に、無事ログインできるようになる。

ログインできるようになった後は、WordPress.comのアカウントを作成した後で、「解決法1」の方法で複数のセーフIPを登録する。

最後に「jetpack_backup」などのフォルダ名を元の「jetpack」に戻すと、jetpackの他の機能も含めて元に戻ってくれる。
 

上記の3つの方法のうちどれか1つで確実に解決できるはずだ。

さくらのレンタルサーバーでログイン画面で500エラー。クイックインストールでも500エラー

さくらサーバーでWordpressが500エラー internal server errorになる

さくらのレンタルサーバーにWordpressをインストールする時にはパーミッションが問題になる場合がある。

だが、パーミッションが問題なくても管理画面(サイト画面も)500エラーになる場合がある。

そのポイントをまとめておく。
 

パーミッションは問題なし!

直接インストールした場合は、フォルダやphpファイルのパーミッションの設定をしておく必要がある。

しかし今回の場合はパーミッションも問題ない

クイックインストールだから、パーミッションに問題がないのも当たり前。

さくらのレンタルサーバーに他のワードプレスも多数インストールしており、他のWordpressは正常に稼働している。

新規にインストールしたWordpressだけが500エラー。

 

色々調べた結果、php.iniが問題だった

まず、さくらのレンタルサーバーではエラーログを確認してみよう。

さくらのインターネットサーバコントロールパネルにログインし、左のメニューから「アクセスログの設定」をクリック。

ページ中ほどの「エラーログの表示 エラーログ」をクリック。

 
エラーログが表示される。下の方が新しいエラーだ。日付を見ながら確認していこう。

[error] [client **.***.0.106] malformed header from script. Bad header=<br />: install.php

このようなエラーが確認できるなら、PHP.iniの編集で500エラーを回避可能。
 

500エラーの回避方法

さくらのインターネットサーバコントロールパネルで

左のメニューから「PHP設定の編集」をクリック。

php.iniで「magic_quotes_gpc = On

となっている。

これは、フォームで送られた全てのデータがエスケープされる。

つまり、PHPのコマンドなどが正常に受け取れなくなる。

まあ小難しい事はどうでもいいので、この箇所ををコメントアウトしよう。

PHPのコメントアウトは 「;」 で可能。

;magic_quotes_gpc = On

とすれば500エラーは回避できる。

さくらのVPSに導入したWordPressでRSSのFeedや、個別記事のページが404 not foundになったら

WordPressでRSSフィードが取得できない時に疑うこと

ワードプレスでは自動でRSSを出力してくれる。その取得URLは下記の通り、

http://example.com/feed/
http://example.com/feed/rss/
か、
http://example.com/?feed=rss
http://example.com/?feed=rss2

他にもあるが、どうでもいいので割愛。

マネージド・レンタルサーバーであれば多分このエラーはレアケース。

ちゃんと指定してもRSSが取得できないケースがある。
VPSにインストールした場合は割とある。
その原因は .htaccess にある。

 

症状

・RSSが取得できない
・直接RSSのURLを見に行くと404エラー(そりゃ取得できる訳もない)
・個別記事も404
・カテゴリーなども404

 

確認

サーバー内(FTPソフトなどで見る)Wordpressのフォルダの .htaccess をダウンロードして中身を見てみよう。

# BEGIN WordPress
<ifmodule mod_rewrite.c=”">
RewriteEngine On
RewriteBase /wp/
RewriteRule ^index\.php$ ? [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

大体こんな感じのものが書かれているはず。

書かれてなければコピペして上書きアップロードで完了。

書かれてるのにダメな場合もある。
よくあるパターンはVPS使っていて .htaccess が無効になっている場合。

 

VPSで個別記事が404になる時の解決法

.htaccess が無効になっているのを有効化する方法。通称黒い窓を触る必要がある。

さくらのVPSで説明するが、他のVPSでもやり方は割と同じ。


さくらの会員メニューにログインする。

「契約情報」→「契約サービス一覧」→「サーバ設定」→「コンソールの中のシリアルコンソール」

なお、シリアルコンソールでなくてもやり方は同じ。

基本的には、マウスは使えない、コピペなど普通にはできない。

キーボードの矢印とコマンドとエンターでやっていく。

[root@www~]#

となっている状態で

vi /etc/httpd/conf/httpd.conf

と入力して(何回か)エンター。

ずらーっと英語が出て来るので

/AllowOverride

とコマンドを打てば検索できる。

「n」 で次の検索結果へ、「N」で前へ検索していく。

# AllowOverride controls what directives may be placed in .htaccess files.
# It can be “All”, “None”, or any combination of the keywords:
# Options FileInfo AuthConfig Limit
#
AllowOverride None

この 「None」 を 「All」 に変更する。

「i」をキーボードで押すとインサートモードになる。

つまり書き換えができる。

インサートモードで「バックスペース」で削除、普通に記入して

記入し終わったらインサートモードを止める。

「ESC」 でインサートモード終了。

続いて mod_rewrite の検索。

/LoadModule rewrite_module

LoadModule rewrite_module modules/mod_rewrite.so の先頭に # がついていれば、その # を削除。

# はコメントアウトなので、 # の行は無視される。

インサートモードを解除(コマンドモードで)

「:wq」エンターで、上書き保存。

[root@www~]# となってるところで、

service httpd restart エンター

で、 httpd を再読み込み。

これで、.htaccess が効くようになり、404は解消されるはず。