WordPressで困った時に役立つお助けコード8つ
WordPressでコーディング中、「理由はなんだかわかんないけどちゃんと動作してくれない!」なんて事がありませんか?私は度々ありました。その都度ググって解決策を探していたのですが、そのお助けコードメモがEvernoteに結構たまってきたので記事にしてみます。よくわからないけど動かない!という時に試してみてください!
お助けコードを使う前に
今まで動いていたのに突然動かなくなった!そんな時は慌てず、とりあえず以下を確認してみてください。プラグインが原因で動作しなくなる事が多いですね。
- 有効化しているプラグインをすべて無効化して試す
- </head> の前に
<?php wp_head(); ?>があるか - </body> の前に
<?php wp_footer(); ?>があるか - PHPコード(特にif構文)に間違いはないか
上記で解決できない場合は以下のコードをチェックしてみてください!
jQueryが動かない!
WordPressにはjQueryやPrototypeなどのJavascriptライブラリーもデフォルトでインストールされています。コンフリクトを避けるため、jQuery使用の際は $ の代わりに jQuery を使いましょう。
$("p.neat").addClass("ohmy").show("slow");
// ↑この$部分を jQueryに。
jQuery("p.neat").addClass("ohmy").show("slow");
jQuery.noConflict(); を使ってもOKです。
$j=jQuery.noConflict();
$("p.neat").addClass("ohmy").show("slow");
// ↑この$部分を $j に。
$j("p.neat").addClass("ohmy").show("slow");
Pタグ(パラグラフタグ)が邪魔!
WordPressで記事やページを作成すると自動的に <p> でくくられちゃいます。それを取り除くには wp-includes/default-filters.php にある add_filter('the_content', 'wpautop'); と add_filter('the_excerpt', 'wpautop'); を探してコメントアウトします。
// この2つをコメントアウト
// add_filter('the_content', 'wpautop');
// add_filter('the_excerpt', 'wpautop');
特定の箇所のみPタグを無効化
the_content(); の直前に remove_filter を記述して特定の箇所のみPタグを無効化できます。
<?php remove_filter ('the_content', 'wpautop'); ?>
<?php the_content(); ?>
コンタクトフォーム7のPタグも邪魔!
同じくPタグ関連。こちらはプラグインの「コンタクトフォーム7」に自動挿入されるPタグを無効化します。wp-confing.php に下記コードを挿入すればOK。
define( 'WPCF7_AUTOP', false );
ページ送りが動かない!
「次のページへ」をクリックしても次に行かない、プラグイン「WP-PageNavi」を有効化してもうまくページ送りできない、example.com/page/2 ←直接URL書いても表示されない…そんな時は if(have_posts()): の部分に下記を追加してみてください。
<?php if (have_posts()) : $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
query_posts( $query_string . "&paged=$paged" ); ?>
複数のページ・投稿を同時に表示したいのに!
WordPressを完全CMS化し複数のページや投稿を並べて表示していると、query_posts でIDを指定していても、先に表示したページ・投稿が表示されてしまう事があります。例えば今見ているこのページ。記事に続いて「関連する記事」「コメント欄」が表示されています。関連する記事を表示する際、クエリーをリセットしないと、コメント欄にはこの記事に対するコメントではなく、「関連する記事」で表示された記事に対するコメントが表示されてしまいます。endwhile; と endif; の間にリセットするコード wp_reset_query(); をサクッと入れておきましょう。
<?php endwhile; wp_reset_query(); endif; ?>
もっと詳しいコードは過去記事「プラグインを使わずWordPressに6の機能をつける」の「2. 関連する記事を表示する」が参考になります。
Moreタグが動かない!
同じく複数のページや投稿を並べて表示していると、Moreタグの設定をしていても「続きを読む」が表示されず、全文表示されてしまう事が。私が陥ったケースでは全ページのヘッダー下に「Welcome message」というタイトルのページコンテンツを表示、続いて各記事のタイトル・コンテンツを表示していました。すると「続きを読む」が表示されず、記事の全文が表示されちゃいました。global $more; で無事解消。
<?php global $more; $more = FALSE; ?>
<?php the_content('続きを読む'); ?>
<?php $more = TRUE; ?>
サムネイル画像のパスが必要!
WordPress 2.9からサムネイル画像の設定が簡単にできるようになりました(WordPress 3.0からはアイキャッチと呼ばれているらしい)。詳しい設定は「WordPress 2.9 の新機能の投稿サムネイル画像の使い方」が非常にわかりやすいです。サムネイル画像を出力する時は the_post_thumbnail(); を記述すればいいのですが、画像のパスが必要だったり、クラスやIDをつけたい場合は下記コードを参照してみてください。
$thumb = get_the_post_thumbnail($post->ID);
$pattern= "/(?<=src=['|\"])[^'|\"]*?(?=['|\"])/i";
preg_match($pattern, $thumb, $thePath);
$theSrc = $thePath[0];
if($thumb == ''){
echo '<img src="sample.jpg" />'; // サンプルの画像を表示
} else {
echo '<img class="thumb" src=" '.$theSrc.' " />'; // サムネイル画像をクラスを付けて表示
}
ログインしたユーザーのみコンテンツを表示したいのに!
サクッと動作確認したい時にも便利なこのコード。if で囲んだ部分はログインしたユーザーにのみ表示されます。
<?php if (is_user_logged_in()) : ?> ここにコンテンツなど <?php endif;?>
その他、みなさんが命拾いしたお助けコードがあればぜひ共有しましょう!

Pingback: [A] wordpressでユーザログインしたときに表示する独自コンテンツの作り方
Pingback: 【朝刊】8月24日 よろづ屋のニュースPickup
Pingback: WordPressで困った時に役立つお助けコード8つ | Webクリエイターボックス | とっても! ちゅどん(雑記帳)
Pingback: Design × Lifehack × CrossOver Lab - 【デラ研Topics】Boogie Boardの発送手続き完了のお知らせが!その他、8月24日にチェックした気になる情報をお届けします!
Pingback: links for 2010-08-24 « 個人的な雑記
Pingback: 後から知ることが多いWordPressお役立ちスニペット9つ
Pingback: えっちゃんの部屋 » WordPressのオリジナルテーマが完成
Pingback: 登録ユーザ意外はコメント禁止にする « Ryo's todo list
Pingback: ネットを便利に活用するTips ネットビジネスラボ » Blog Archive » ページ送りをしても同じページ一覧になってしまう
Pingback: WordPress記事投稿で改行と段落をきちんと区別して挿入する | IT女子のお気に入りフォルダ
Pingback: PIPER NIGRUM » WordPressのアイキャッチ画像を簡単におさらいしてみる