スラッグの部分一致で記事を抽出する

スラッグに「○○」という単語が含まれる記事を検索したい、と思ったのですが、意外なことにget_postsやpre_get_postsで抽出することができませんでした。s=ほげほげで簡単に取れるかと思ったのですが……。

方法を調べましたので紹介します。

AD

テンプレートに書く場合

データベースに接続できるwpdbクラスを使い、SQL文を送って検索します。

ざっくり言うと

$wpdb->get_results($wpdb->prepare(SQL文)

でほしい内容が取得できます。データベースから直接結果を取り出しますので、SQLを上手く書ければ高速化や通常のクエリではできない検索条件を設定することができます。

ただ私は正直あまり得意ではないです……。

もうちょっと実践的な使い方:重複記事を削除する

今回私がやりたかったことは「スラッグの末尾が『-2』『-3』…で終わっている記事を削除する」ということでした。
同一スラッグを指定して投稿してしまった場合、スラッグの末尾に「-数字」が付加されます。

そのような投稿のみを抽出し、削除して記事を整理したかったのです。

以下をfunctions.phpに記述します。

これで管理画面上で「www.example.com/wp-admin/index.php?del=exec」にアクセスすると、同一スラッグで投稿してしまった記事が削除されます。

記事削除を行う処理ですので、実行時はvar_dumpでIDを確認するなど注意して実行してください。

参考記事

以下のサイトの内容が参考になりました。ありがとうございます。

WordPressからデータベースに直接アクセスする | webOpixel

【WP】$wpdb->prepare内のSQL文にワイルドカード【LIKE %】を使用する場合。Wordpress : 僕の私の備忘録

AD

Share

Commentsコメント

メールアドレスは公開されません。コメントは必ずご入力ください。

HTMLタグは使用できません。ソースコードを書き込みたい場合はCodetterGistCodePenなどのご利用が便利です。

コメントはまだありません。