皆さんこんにちは!こんばんは!!ロト君です。今回は、Smart Custom Fieldsの画像をWordPressのPostのアイキャッチ画像に自動変換させる、Functionについて記載したいと思います。
1.Smart Custom Fields(SCF)について
SCFは、ACFと同様に、カスタムフィールドを簡単に作成出来る、WordPressのプラグインです。
個人的には、ACFを使っていますが、今回はとある件でSCFをさわる事になりました。
プラグインの詳細は公式より確認出来ます。
設定はこんな感じです。


①には、タイプ。今回は画像を選択します。
②には、カスタムフィールド名のimgを記載します。
③には、有効化したい場所を選択します。

こんな感じで、投稿画面に出て来ます!!
2.functions.phpを使ってアイキャッチ画像を自動変換させる
最初はクセが強く、困っていましたが漸く出来たので、コードを共有したいと思います。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
<?php // Smart Custam Fieldのimgをアイキャッチに登録する // SCF::get( 'field-name' )により取得可能 function my_def_thumbnail( $post_id ){ // $wpdbのグローバル有効化 global $wpdb; // wp_postsの最新IDを取得 $postIdMax = $wpdb->get_var( "SELECT MAX(ID) AS postIdMax FROM {$wpdb->posts}" ); // クエリの作成 $query = " SELECT meta_value FROM $wpdb->postmeta WHERE post_id = $postIdMax AND meta_key = 'img' "; // クエリの実行 $datas = $wpdb->get_results( $query ); // 各種投稿タイプで、アイキャッチ画像が設定されていない場合 // 且つ、SCFのimgの変更で、アイキャッチ画像を変更 if ( $datas[0]->meta_value != get_post_thumbnail_id( $post_id ) || get_post_type($post_id) == 'post' && !has_post_thumbnail() ) { // アイキャッチ画像の変更 update_post_meta( $post_id, '_thumbnail_id', $datas[0]->meta_value ); } } // 公開・更新などでの関数の実行 add_action( 'save_post', 'my_def_thumbnail' ); ?> |
上記のコードは、functions.php中に記載します。
今回のPointとしては、$wpdbを使ってる事です。
$wpdbは、WordPressのコアをさわる為のモノです。結構、扱いには注意しないといけないですね!ww
内容としては、add_actionでsave_post時に、my_def_thumbnail関数を読ませてます。
関数内は、update_post_metaで、$post_idのPOST_IDを、アイキャッチ画像を$wpdbで調べたmeta_valueで置き換えている感じです。
3.カスタム投稿タイプ対応版
カスタム投稿タイプ対応版のFunctionsです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
<?php // Smart Custam Fieldのimgをアイキャッチに登録する // SCF::get( 'field-name' )により取得可能 // SCF::gets()によりすべての値を取得可能 function my_def_thumbnail( $post_id ){ // $wpdbのグローバル有効化 global $wpdb; // wp_postsの最新IDを取得 $postIdMax = $wpdb->get_var( "SELECT MAX(ID) AS postIdMax FROM $wpdb->posts" ); // クエリの作成 // imgのpost_idを検出する $query = " SELECT meta_value FROM $wpdb->postmeta WHERE post_id = $postIdMax AND meta_key = 'img' "; // クエリの実行 $datas = $wpdb->get_results( $query ); // 取得したIDでアイキャッチ画像のレコードを更新 update_post_meta( $postIdMax, '_thumbnail_id', $datas[0]->meta_value ); } // 公開・更新などでの関数の実行 add_action( 'updated_postmeta', 'my_def_thumbnail' ); ?> |
以前の方法だと、カスタム投稿タイプを作った際にうまく、動かなかったので、修正を加えました!!
Pointは、updated_postmetaでのフックですね。save_postではうまく行きませんでした。
4.まとめ
久しぶりに、WordPressとPHPを触ったので、作成中はエラーばっかりで大変でしたwww
しかし、今回SCFを通して、$wpdbの扱いも勉強できたので良かったです。
何か、参考になればありがたいですね!!では、今回はここまでで!!(*^-^*)ノシ≡3