サポート » 使い方全般 » カテゴリにカスタムフィールドを追加

  • 解決済 hiro0506

    (@hiro0506)


    初めて投稿させて頂きます。

    タイトルのとおり、カテゴリにカスタムフィールドを追加する方法が分からず、
    どなたかご存知の方がいましたらお知恵をお貸し頂ければと思い質問させて頂きました。

    http://ja.forums.wordpress.org/topic/13077?replies=5
    「カテゴリ カスタムフィールド」などで検索すると、上記トピックのやり方が出てきますが、
    当方の環境では、追加することができません。

    wordpress3.5.1
    カスタムフィールドの追加はプラグインなどを使わず、functions.phpに記述する形で実現したい。

    参考トピックなどの方法で追加しようとしても、そもそもadd_actionした関数自体呼ばれない状態です。

    バージョンが上がったことで仕様が変わってしまったのでしょうか?

    どなたか、アドバイスの方よろしくお願いいたします。

15件の返信を表示中 - 1 - 15件目 (全15件中)
  • バージョンが上がったことで仕様が変わってしまったのでしょうか?

    動くと思いますよ

    add_action ( 'edit_category_form_fields', 'extra_category_fields',10);

    参照先のコードに、第三引数が、優先度なので 10を基準に値を変更してみてだめなら

    add_action( 'init','my_action' );
    
    function my_action(){
    
    add_action ( 'edit_category_form_fields', 'extra_category_fields' );
    }

    とか してみるといいかもしれません

    トピック投稿者 hiro0506

    (@hiro0506)

    nobita様

    お返事ありがとうございます。
    リファレンスに第三引数の数値が小さいほど優先度が高いとありましたので、
    add_action ( 'edit_category_form_fields', 'extra_category_fields',1);
    としたり、

    add_action( 'init','my_action' );
    
    function my_action(){
    
    add_action ( 'edit_category_form_fields', 'extra_category_fields' );
    }

    こちらも試してみましたが、やはりextra_category_fields()は呼ばれていないようです。

    プラグインが邪魔をしてるのかと思い、使用しているプラグインを全て停止してもみたのですが、状況が変わらないようです・・

    前回

    動くと思いますよ

    としか書かなかったのですが私の環境では、(3.51)

    add_action ( 'edit_category_form_fields', 'extra_category_fields' );

    で正常にフィールドの追加が出来ていました。

    Twentytwele等でも、状態が再現できるなら、テーマと どのファイルの何行目に、記述したコードを記述したのか、こちらで再現可能な情報をいただけますか?

    トピック投稿者 hiro0506

    (@hiro0506)

    nobita様

    度々のお返事ありがとうございます。

    試しに新しくWPをインストールし直して、何も手を付けずに以下のファイル末尾にコードを追加してみました。

    wp-content/themes/twentytwelve/functions.php

    追加したコードは以下になります。

    add_action ( 'edit_category_form_fields', 'extra_category_fields', 1);
    function extra_category_fields( $tag ) {
        var_dump("catAction");
        $t_id = $tag->term_id;
        $cat_meta = get_option( "cat_$t_id");
    ?>
    <tr class="form-field">
    	<th><label for="time">時間</label></th>
    	<td>
    		<input id="time" type="text" size="36" name="Cat_meta[time]" value="<?php if(isset ( $cat_meta['time'])) echo esc_html($cat_meta['time']) ?>" />
    </tr>
    <?php
    }

    上記を設定後、投稿のカテゴリリンクをクリックしても、フィールドは追加されておらず、また関数の最初に記述してある「var_dump(“catAction”);」の部分も出力されていないため、extra_category_fields()自体呼ばれていないと認識しております。

    何か設定が間違っているのでしょうか?
    度々でお手数ですがご助言お願いいたします。

    「投稿のカテゴリリンクをクリックしても」というのが気になります。
    確認している画面を間違っているのでは?

    表示されるのは、タームの方のカテゴリー編集画面ですよ。
    説明フィールドの下に出てませんか?

    トピック投稿者 hiro0506

    (@hiro0506)

    pluto1234様

    お返事ありがとうございます。

    >表示されるのは、タームの方のカテゴリーですよ。
    タームのカテゴリとは、いわゆるカテゴリの編集画面ということでしょうか?

    既に登録済みのカテゴリの編集画面を確認してみると、無事表示を確認できました!
    ありがとうございました!

    ちなみに別の質問になってしまい恐縮ですが、ターム?を新規追加する画面

    /wp-admin/edit-tags.php?taxonomy=category

    にも、カスタムフィールドを表示させるにはどうすればいいのでしょうか?

    もし、ご存知でしたらご助言頂けますと助かります。

    タクソノミーとしてのカテゴリーにカスタムフィールドを付ける方法は分かりません。
    探せばそのためのフックもあるのかもしれませんが、必要性を感じたことがないので・・。
    実際に、どういうときに使うのでしょう。

    カテゴリー => タクソノミー
     A    => ターム
     B    => ターム
     C    => ターム

    通常、どちらもカテゴリーと呼ぶのでまぎらわしいですが・・。

    追加:
    よく考えると、カテゴリー(ターム)を新規登録するときに、カスタムフィールドも入力したいという意図ですね。でも、わかりません。

    トピック投稿者 hiro0506

    (@hiro0506)

    すみません、「タクソノミー、ターム」の認識がよく分かっておらず、間違いがあるかもしれません。

    例えば、今回の方法で設定を行った場合。

    1.デフォルトの投稿カテゴリに「イベント」というタームを追加する。
    /wp-admin/edit-tags.php?taxonomy=category
    登録時はカスタムフィールドが表示されないため、登録できない。

    2.登録した「イベント」の編集画面に行くと、追加したカスタムフィールドが表示されているので、登録できる。
    /wp-admin/edit-tags.php?action=edit&taxonomy=category&tag_ID=2&post_type=post

    と、2度手間になってしまうので、1.の登録時にカスタムフィールドを表示させたいと思った次第です。

    「追加」で書いたことですね。
    たぶんできますが、調べながらじゃないとコードを書くことができないのでやめておきます。

    誰か詳しい方が書いてくれるかもしれません。

    モデレーター gatespace

    (@gatespace)

    なんで、プラグイン使わないのでしょう?
    Advanced Custom Fields 使えばできますよ。
    (カテゴリーの新規登録時も、編集画面も)
    http://www.advancedcustomfields.com/

    上記を設定後、投稿のカテゴリリンクをクリックしても、フィールドは追加されておらず、また関数の最初に記述してある「var_dump(“catAction”);」の部分も出力されていないため、extra_category_fields()自体呼ばれていないと認識しております。

    何か設定が間違っているのでしょうか?

    間違っていると思います。

    var_dump("catAction");は、なにを dump しようとしているのですか?

    http://php.net/manual/ja/function.var-dump.php

    PHP関数の使い方を理解したうえで、注意深く作業をしてください。

    トピック投稿者 hiro0506

    (@hiro0506)

    gatespace様

    ご指摘のプラグインを使用すれば解決することはもちろん承知しております。
    ただ、今回はカスタムフィールドの設定にプラグインを使用しない方針で進めていたため、functions.phpに記述する形での方法をお聞きしておりました。

    nobita様
    記載している「var_dump()」の部分は関数が呼ばれているかを確認するために一時的に記述したものです。
    見ての通り「catAction」という文字列を出力するだけです。
    動作に影響はないと思いますので、この部分が「間違っている」にはならないかと思いますが?

    モデレーター gatespace

    (@gatespace)

    文字出力するだけなら、echo でいいんじゃ。
    (というか table 要素の中に入っちゃうから確認難しいかも)

    いちおう、前にカテゴリーにカスタムフィールドを追加するのは自作したことあるので、
    リンク置いておきます。
    https://github.com/gatespace/gs-add-extra-fields-for-category/blob/master/add_extra_fields_category.php

    アクションフックはコアのソース見る方が早いです。
    http://codex.wordpress.org/Plugin_API/Action_Reference

    hiro0506さん

    hiro0506さんが動作の確認用に使用したvar_dump関数では、確認できなかったのかという点を、書き留めておいていただけると、みんなの役に立つと思いますよ
    もちろん、hiro0506さんの役にも立つと思います

    トピック投稿者 hiro0506

    (@hiro0506)

    gatespace様

    参考リンクありがとうございます。
    とても参考になりました。
    これからはリファレンスも見るようにします。

    nobita様

    そうですね。
    要らぬ誤解にもなるため、余分なコードは削除してから投稿するように気を付けます。

    皆様のおかげで無事、登録、編集時共にカスタムフィールドを追加することができました。
    今回は、正確にはカスタム投稿のカスタムタクソノミーとしてカテゴリがあり、そのカテゴリにカスタムフィールドを追加したいということでした。

    拙いコードですが、貼り付けておきますので、どなたかのお役に立てれば幸いです。

    add_action('top_productcat_add_form_fields', 'extra_taxonomy_fields');
    add_action('top_productcat_edit_form_fields', 'extra_taxonomy_fields');
    function extra_taxonomy_fields($term)
    {
        if (is_object($term)) {
            $term_id = $term->term_id;
            $cat_meta = get_option('cat_' . $term_id);
            $view1 = ($cat_meta['img'] !== '') ? '<img src="' . $cat_meta['img'] . '" width="100" />' : '';
        }
    ?>
        <tr class="form-field">
        <th><label for="upload_image">画像URL</label></th>
        <td>
        <input id="file1" data-upload-type="image" type="text" size="36" name="Cat_meta[img]" value="<?php if(isset($cat_meta['img'])) echo esc_html($cat_meta['img']) ?>" /><br />
        画像を追加: <img src="images/media-button-other.gif" alt="画像を追加"  id="upload_button1" class="upload_button" value="Upload Image" style="cursor:pointer;" />
        <div id="view1" class=""><?php echo isset($view1) ? $view1 : ''; ?></div>
        </td>
        </tr>
    <?php
    }
    add_action('edited_term', 'save_extra_taxonomy_fileds');
    add_action('created_term', 'save_extra_taxonomy_fileds');
    function save_extra_taxonomy_fileds($term_id)
    {
        if (isset($_POST['Cat_meta'])) {
            $t_id = $term_id;
            $cat_meta = get_option("cat_$t_id");
            $cat_keys = array_keys($_POST['Cat_meta']);
            foreach ($cat_keys as $key) {
                if (isset($_POST['Cat_meta'][$key])) {
                    $cat_meta[$key] = $_POST['Cat_meta'][$key];
                }
            }
            update_option("cat_$t_id", $cat_meta);
        }
    }
    add_action('admin_print_scripts', 'my_admin_scripts');
    add_action('admin_print_styles', 'my_admin_styles');
    function my_admin_scripts() {
        global $taxonomy;
        if('top_productcat' == $taxonomy) {
            wp_enqueue_script('media-upload');
            wp_enqueue_script('thickbox');
            wp_register_script('my-upload', get_bloginfo('template_directory') . '/js/upload_image.js');
            wp_enqueue_script('my-upload');
        }
    }
    function my_admin_styles() {
        global $taxonomy;
        if('top_productcat' == $taxonomy) {
            wp_enqueue_style('thickbox');
        }
    }
    
    // upload_image.js
    jQuery(document).ready(function() {
        var formfield;
        var uploadType;
        //メタボックス内のボタンからmedia_upload.phpを呼び出す
        jQuery('.upload_button').click(function() {
            var id = jQuery(this).attr('id').replace(/upload_button/, '');
            uploadType = jQuery('#file' + id).attr('data-upload-type');
            jQuery('#file' + id).addClass('file');
            jQuery('#view' + id).addClass('file_view');
            formfield = jQuery('.file').attr('name');
            tb_show('', 'media-upload.php?type=image&TB_iframe=true');
            return false;
        });
    
        window.original_send_to_editor = window.send_to_editor;
        //メディアアップローダーからきた変数htmlを各々へ挿入
        window.send_to_editor = function(html){
            html = new String(html).replace(/\"/g, "'");
            result = /\<a href=\'([^']+)\'.*?\>/g.exec(html);
            if (result[1]) {
                if (uploadType == 'image') {
                    viewHtml = "<img src='" + result[1] + "' width='100' />";
                } else {
                    viewHtml = "<a href='" + result[1] + "' target='_blank'>添付ファイル</a>";
                }
            } else {
                viewHtml = html;
            }
            if (formfield) {
                jQuery('.file').val(result[1] ? result[1] : html);
                tb_remove();
                jQuery('.file').removeClass('file');
                //挿入した画像プレビューさせるエリアへソースをいれる
                jQuery('.file_view').html(viewHtml);
                jQuery('.file_view').removeClass('file_view');
            } else {
                window.original_send_to_editor(html);
            }
        };
    });

15件の返信を表示中 - 1 - 15件目 (全15件中)
  • トピック「カテゴリにカスタムフィールドを追加」には新たに返信することはできません。