記事をテーマやプラグインのセットアップの際に自動的に投稿する
プラグインや、顧客ごとのワンオフのテーマを作る際に、通常投稿タイプや固定ページ、カスタム投稿タイプへ自動的に記事を投稿したい場合がある。
自分のローカルにはむかーしから書いてきたコードが採用・ボツを問わずに大量に残っており、現在進めている案件で記事題のことを行わなくならなくなったため発掘。
目が回るほどの多忙のせいで書いておきたい書いておきたいと思いながらも、なかなか投稿できない日々が続いていており、ようやくスキマ時間が少し取れたので掲載しておく。
WordPressには自動で投稿を行う関数があるのでそれを利用。
具体的にはwp_insert_post()という関数を使うが、このとき注意するべきこととしては、この関数は投稿の重複チェックを行ってくれない。
そのため、ただ単純にwp_insert_post( $arg )などと書いてもテーマやプラグインが読み込まれる度にそれが実行され、投稿画面がえらいことになる。
で、それを踏まえて、作ったコード。案件のために使ったコードをそのまんま載っける。
function theme_auto_insert_post() { $check = get_posts( array( 'name' => 'news', 'post_type' => 'page', 'post_status' => 'any', ) ); if( empty( $check ) ) { wp_insert_post( array( 'ID' => '', 'post_title' => 'ニュース', 'post_name' => 'news', 'post_type' => 'page', 'post_status' => 'publish', 'post_content' => '', ) ); } } // プラグインの場合 add_action('plugins_loaded', 'user_auto_insert_post'); // テーマの場合 add_action( 'after_setup_theme', 'user_auto_insert_post' );
上記のコードは、(ゴミ箱や自動保存は除く)いかなる状態でもnewsスラッグを持つ記事が固定ページに存在しない場合に記事を固定ページの投稿タイプへ突っ込む。
その際にget_posts()で記事の存在をチェック。
これはスラッグをキーにして、記事を突っ込むか突っ込まないかの存在のチェックを行いたいがため。
WP_Queryを使って余計なことを書いてもアレなので、今回はget_posts()。
顧客ごとのワンオフのテーマの場合、ダダンダンと繰り返し書けば、いちいち本番環境に作成したテーマを入れるときに固定ページに記事を投稿しなくて済む。
プラグインの場合は、それ用のクラスを作って、メソッドとして書くようにするべきだけど。
短いが今回は以上!
ってか、いろんなフラストレーションとともにまだまだ掲載したいコードがたくさんあるのは、案件ありきの皮肉というべきものなのだろうか。
それだけのためにここにコードを書いてるわけでもないんだがね~(´・ω・`)