WordPressで困った時に役立つお助けコード8つ

thumb_wp_code

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> でくくられちゃいます。それを取り除くには functions.phpremove_filter('the_content', 'wpautop'); を追加します。

// これをプラス
remove_filter('the_content', '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;?>

その他、みなさんが命拾いしたお助けコードがあればぜひ共有しましょう!

シェアする

コメント