最近知ったのですが、どうも WordPress 4.4 あたりからカテゴリーとかタグにもカスタムフィールドを持たせることができるようになっていたそうなのでためしてみることに。
使い方も基本的には add_post_meta 系と同じような感じで使えるようです。
- add_term_meta() | Function | WordPress Developer Resources
- update_term_meta() | Function | WordPress Developer Resources
- delete_term_meta() | Function | WordPress Developer Resources
- get_term_meta() | Function | WordPress Developer Resources
今回はこれを使ってカテゴリーサムネイルを登録できるようにしてみます。
カテゴリー管理画面からカテゴリーサムネイルを管理できるようにする
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 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
<?php $taxonomy = (isset($_REQUEST['taxonomy'])) ? $_REQUEST['taxonomy'] : false; if ($taxonomy) { // フォームの生成 add_action( "{$taxonomy}_edit_form" ,function($tag , $taxonomy) { $cat_thumb_src = get_term_meta($_REQUEST['tag_ID'],'taxmeta_pagemeta_catThumb',true); $cat_thumb = ($cat_thumb_src) ? "<img src=\"{$cat_thumb_src}\"\ style=\"max-width:100%; height:auto;\">" : null; echo "<h3>Category Thumbnail</h3>"; echo "<table class=\"form-table\">"; echo "<tr class=\"form-field\"><th><label>preview</label></th><td><div id=\"cat_thumb_preview\">{$cat_thumb}</div></td></tr>"; echo "<tr class=\"form-field\"><th><label for=\"custom_term_meta_catThumb\">thumbnail url</label></th><td><input type=\"text\" id=\"custom_term_meta_catThumb\" name=\"custom_term_meta_catThumb\" size=\"40\" value=\"{$cat_thumb_src}\"></td></tr>"; echo "<tr class=\"form-field\"><th><label>control panel</label></th><td><button id=\"addThumb\" class=\"button button-primary\" data-target=\"custom_term_meta_catThumb\">追加</button> <button id=\"deleteThumb\" class=\"button\" data-target=\"custom_term_meta_catThumb\">削除</button></td></tr>"; echo "</table>"; },10,2); // 保存処理 add_action('edited_'.$taxonomy,function($term_id,$taxonomy){ update_term_meta($_POST['tag_ID'],'taxmeta_pagemeta_catThumb',esc_html($_POST['custom_term_meta_catThumb'])); },10,2); // メディアアップローダを有効化 add_action('admin_enqueue_scripts',function(){ wp_enqueue_media(); }); // メディアアップローダ関連スクリプトを管理画面に出力 add_action('admin_print_footer_scripts',function(){ echo <<< EOF <script> jQuery(document).ready(function($) { var custom_uploader; $('#addThumb').click(function(e){ e.preventDefault(); var target = $(this).attr('data-target'); custom_uploader = wp.media({ title: 'サムネイルを選択', library: { type: 'image' // 対象を画像のみにする }, button: { text: 'サムネイルに設定' }, multiple: false // 複数選択モードをオフに }); custom_uploader.on('select', function() { var images = custom_uploader.state().get('selection'); images.each(function(file){ var mediaurl = file.toJSON().url $('input#'+target).val(mediaurl); $('#cat_thumb_preview img').remove(); $('#cat_thumb_preview').append('<img src="'+ mediaurl +'" style="max-width:100%; height:auto;">'); }); }); custom_uploader.open(); }); // カスタムリンク削除 $('#deleteThumb').click(function(e){ e.preventDefault(); $('#custom_term_meta_catThumb').val(''); $('#cat_thumb_preview img').remove(); }); }); </script> EOF ; }); } |
これで管理画面にフィールドが追加されるようになります。
新しいフィールドに何か入れて保存すると、次回入力済みとなっていれば成功です。
データベースで確認する場合は、「wp_termmeta」テーブルにデータが入ってればOK。
呼び出すには、category.php などで、
1 2 3 4 5 |
<?php $query = get_queried_object(); $thumb = get_term_meta($query->term_id,'taxmeta_pagemeta_catThumb',true); ?> <img src="<?php echo $thumb; ?>" alt=""> |
みたいにすれば良いかと。
これまでは専用の管理画面とか作って、wp_options とかに保存したりしてたんですが、これでかなり楽になりそうです。
コメントする