PHPでWordPressからPタグがない記事一覧を取得する
WordPressには記事の本文中で改行した際に、PタグやBRタグを自動挿入する機能が備わっています。
しかし、これが微妙に間違った挿入の仕方(特定のタグ内だとPの終了タグが漏れたり)をされることがあり、「HTMLのタグ打ちするならChrome拡張のHTMLエラーチェッカーが便利」で紹介したようなHTMLタグのチェックツールを使っていると度々指摘されて微妙な気分になります。
そこで、WordPressのPタグ自動挿入機能(オートパラグラフ)をオフにする方法を調べてみたのですが、同じように考える人はいるようでたくさんの解説記事が出てきました。
WordPressのPタグ自動挿入を止める方法
functions.phpの最初に下記2行を挿入するだけでWordPressの自動整形を無効にすることが出来ます。
remove_filter('the_content', 'wpautop');// 記事の自動整形を無効
remove_filter('the_excerpt', 'wpautop');// 抜粋の自動整形を無効
functions.phpはテーマに含まれているので、wp-content/themesの下にある普段使っているテーマのディレクトリーの下にあるハズです。
自動整形機能を止めて困ること
WordPressが勝手にPタグを挿入しなくなることで、綺麗なHTMLタグを書けるようになったのは良いものの、既に100記事近く投稿した後だったので、過去記事の修正に難儀しました。
まぁ大してアクセス数もなかったので、気がついた順にテキトーに修正(手動でのPタグ挿入)していたのがいけなかったのですが、どの記事とどの記事を修正したのかわからなくなってしまいましたw
というわけで、直接MySQLのwp_postsテーブルを参照し、Pタグが含まれていない(≒まだ修正していない)記事の一覧を表示するPHPスクリプトを作りました。
Pタグがない記事一覧を取得するサンプルコード
<?php
$cfg['PDO_DSN'] = 'mysql:host=localhost;dbname=[データベース名];';
$cfg['PDO_USER'] = '[MySQLユーザー名]';
$cfg['PDO_PASS'] = '[MySQLパスワード]';
$conn = new PDO($cfg['PDO_DSN'], $cfg['PDO_USER'], $cfg['PDO_PASS'],
array( PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => true));
$query = "SELECT * FROM wp_posts".
" WHERE post_status='publish' AND post_type='post'".
" AND post_content NOT LIKE '%<p>%'";
foreach ($conn->query($query) as $row) {
$url = '/'.$row['post_name'].'/';
echo '<a href="'.$url.'">'.$row['post_title'].'</a><br>';
}
?>
解説
解説も何も下記SQL文を発行しているだけなので、わざわざPHPで作らなくてもphpmyadmin等でSQL発行するだけでも良い気がします。
SELECT * FROM wp_posts WHERE post_status='publish' AND post_type='post' AND post_content NOT LIKE '%<p>%'
ただ、記事へのリンクを表示することで、ポチポチクリックするだけで記事の確認と編集作業へスムーズに移行できるので、ちょっぴり便利かな、と。
もう少しちゃんとコーディングして、Pタグがない記事一覧を抽出した後、自分なりの自動整形を施すことも考えましたが、過去記事の文章を見直しながら手直しできたので、ぼくの場合はちょうど良かったかも。
まとめ
- WordPressの自動整形機能を止めるにはfunctions.phpにremove_filterを2行追加する
- WordPressの記事一覧を直接SQL文で検索したい場合はwp_postsテーブルを参照する
ただ… ですね…
WordPressの管理画面の[投稿一覧]の右上に検索ボックスがあるじゃないですか。
ここで「-<p>」と検索すると<p>を含まない記事の検索ができるんです。
除外検索はできないものと思い込んでPHPスクリプトを組んでしまいましたが、こんな簡単に除外検索ができたとは…。
ということで、単にPタグを含まない記事一覧を表示したい、というだけなら「-<p>」で検索するのが一番てっとり早いです。
ちゃんちゃん。