「ワードプレス」タグアーカイブ

さくらの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は解消されるはず。

Twenty Twelveのスマホメニューが開かない場合の対処法

WordPressのスマホレイアウトでメニューボタンが動かない!

ある特定の条件下で、Wordpressのテーマ、Twentytwelveのスマホ用メニューが開かない場合がある。
twentytwelve-menu1
この修正方法を紹介。
 

 

条件1 Twentytwelveを使っている。

WordPressのテーマ(テンプレート)にtwentytwelveを使っている時にこれは発生する。TwentyelevenやTwenty thirteen fourteen fifteen…などでは起こらない(今後ずっとおこらないかどうかは不明)

条件2 子テーマを使用していて、header.phpをカスタマイズしている

親テーマのheader.phpがアップデートで変更になった。具体的には端末判定によるスマホ対応ではなく、レスポンシブデザインによるスマホ対応になった。

レスポンシブってなに?って場合はこちらのレスポンシブデザインでtableタグを制御をチェック。

この2つの条件が当てはまる場合に、Twentytwelveのスマホメニューが動かなくなる。
 

 

解決法 子テーマのheader.phpを修正

 
Wordpressの管理画面にログインし「外観」→「テーマ編集」

右上の「編集するテーマを選択:」の箇所がTwentytwelveの子テーマになっている事を確認して、「header.php」を編集する。

メニューの部分が

<nav id=”site-navigation” class=”main-navigation” role=”navigation”>
<h3 class=”menu-toggle”><?php _e( ‘Menu’, ‘twentytwelve’ ); ?></h3>
<a class=”assistive-text” href=”#content” title=”<?php esc_attr_e( ‘Skip to content’, ‘twentytwelve’ ); ?>”><?php _e( ‘Skip to content’, ‘twentytwelve’ ); ?></a>
<?php wp_nav_menu( array( ‘theme_location’ => ‘primary’, ‘menu_class’ => ‘nav-menu’ ) ); ?>
</nav><!– #site-navigation –>

となっている箇所があるはずなので、その中の

<h3 class=”menu-toggle”><?php _e( ‘Menu’, ‘twentytwelve’ ); ?></h3>

を、↓↓↓ に変更するだけ。

<button class=”menu-toggle”><?php _e( ‘Menu’, ‘twentytwelve’ ); ?></button>

これでメニューが動くようになったはずだ。

なお、カスタマイズは自己責任で。心配ならバックアップを取っておこう。

WordPressでログインしてる時だけスタイルシートを追記する方法

WordPressで、ログイン時だけdisplay noneなどを適用し、非表示にする方法

 
 
例えば、「ログインはこちら」などを固定フッターに表示しているが、ログインした人には、固定フッターそのものを非表示にしたい場合などに便利。

 
beforelogin
↓↓↓ログインすると、固定フッターを非表示に↓↓↓
afterlogin
 

 

ちなみに、上の写真のように、固定フッターに「ログインボタン」を追加するのに便利なWordperssのプラグインはこちらの記事を参照。
固定フッターを導入する方法 ワードプレスプラグインSimple Sticky Footer
 

 

functions.phpにログイン時のみ、CSS追記をする記述を追加

 

管理画面の「外観」→「テーマの編集」→「テーマのための関数(functions.php)」 とクリックして、 functions.php に、

add_action( ‘wp_head’, ‘footer_custom’);
function footer_custom() {
if ( is_user_logged_in() ) :
echo ‘<style type=”text/css”>#sticky-footer {display: none;}</style>’;
endif;
}

と追記しよう。

add_action( ‘wp_head’, ‘footer_custom‘);
function footer_custom() {

この、footer_custom は任意の名前でOK。

これで、ログイン時のみ、ヘッダーに、「id=”sticky-footer” に対して display: none; ね」と追記することができる。
 

 

応用編、ログインしてない時だけに適用する

 

add_action( ‘wp_head’, ‘footer_custom’);
function footer_custom() {
if ( is_user_logged_in() ) :
else :
ここに非ログイン時の処理を記載
endif;
}

こんな感じで色々使える。