web-dev-qa-db-ja.com

新しい分類法を作成するときにカスタム分類法フィールドを追加する

編集:WordPress v4.4以降に関する重要事項

この質問では、古いバージョンのWordPressにリアルタームメタがないための素晴らしい回避策が使用されていましたが、WordPress v4.4のリリース以来、 リアルタームメタが導入されました

これはWordPress 4.4以降の用語metaの良い出発点のような投稿です

古いコードを扱っている人にはまだ有用である可能性があるので、この質問は残しておきますが、上記のメモを追加して、用語metaの新しい実装を始める開発者が正しい方向に進むようにしました。

編集の終わり


分類法のカスタムフィールドを追加するために@Bainternetによる this スーパーチュートリアルを利用することができました。マークアップを微調整し、 "Add New Category"管理ページにフィールドを追加するための別のコールバックを追加しました。私のコードはこの質問の最後にあります。

しかし、私は落胆に遭遇しました。カスタムフィールド入力は新しいカテゴリの追加ページに表示されますが、フィールドは保存されません。

私は、新しい分類法の追加ページでajaxを使用していることに気付きました。それが問題の一部になる可能性があります。私はJSを無効にしようとしましたが、それでも同じ問題に遭遇します。私はフックを探してコアを掘り下げてきましたが、それを見つけることができません。ネット上にはさまざまなチュートリアルがありますが、それらはすべて分類編集画面を使用して入札を行っているようです。

これを機能させる方法について何かアイデアはありますか?

/**
 * Add extra fields to custom taxonomy edit and add form callback functions
 */
// Edit taxonomy page
function extra_edit_tax_fields($tag) {
    // Check for existing taxonomy meta for term ID.
    $t_id = $tag->term_id;
    $term_meta = get_option( "taxonomy_$t_id" ); ?>
    <tr class="form-field">
    <th scope="row" valign="top"><label for="cat_Image_url"><?php _e( 'Category Navigation Image URL' ); ?></label></th>
        <td>
            <input type="text" name="term_meta[img]" id="term_meta[img]" value="<?php echo esc_attr( $term_meta['img'] ) ? esc_attr( $term_meta['img'] ) : ''; ?>">
            <p class="description"><?php _e( 'Enter the full URL to the navigation image used for this category.' ); ?></p>
        </td>
    </tr>
<?php
}
add_action( 'category_edit_form_fields', 'extra_edit_tax_fields', 10, 2 );

// Add taxonomy page
function extra_add_tax_fields( $tag ) {
    // Check for existing taxonomy meta for term ID.
    $t_id = $tag->term_id;
    $term_meta = get_option( "taxonomy_$t_id" ); ?>
    <div class="form-field">
        <label for="cat_Image_url"><?php _e( 'Category Navigation Image URL' ); ?></label>
        <input type="text" name="term_meta[img]" id="term_meta[img]" value="<?php echo esc_attr( $term_meta['img'] ) ? esc_attr( $term_meta['img'] ) : ''; ?>">
        <p class="description"><?php _e( 'Enter the full URL to the navigation image used for this category.' ); ?></p>
    </div>
<?php
}
add_action( 'category_add_form_fields', 'extra_add_tax_fields', 10, 2 );

// Save extra taxonomy fields callback function.
function save_extra_taxonomy_fields( $term_id ) {
    if ( isset( $_POST['term_meta'] ) ) {
        $t_id = $term_id;
        $term_meta = get_option( "taxonomy_$t_id" );
        $cat_keys = array_keys( $_POST['term_meta'] );
        foreach ( $cat_keys as $key ) {
            if ( isset ( $_POST['term_meta'][$key] ) ) {
                $term_meta[$key] = $_POST['term_meta'][$key];
            }
        }
        // Save the option array.
        update_option( "taxonomy_$t_id", $term_meta );
    }
}   
add_action( 'edited_category', 'save_extra_taxonomy_fields', 10, 2 );   
//add_action( '...Can't find hook to enable saving custom fields when adding a new term
6
Dave Romsey

解決しました!

add_action( 'create_category', 'save_extra_taxonomy_fields', 10, 2 );   

カテゴリメタプラグインの小道具 。 WPリポジトリからさまざまなカテゴリメタプラグインをダウンロードしました。これには、[Add New]画面でメタデータを追加する機能があります。私はコードを掘り下げて、とらえどころのないcreate_ {term}フックを見つけました。

6
Dave Romsey

あなたが参照したチュートリアルは素晴らしかったと私は思いますそして私はそれをこのコードに基づいています。分類法menu_categoryのメタをその分類法の追加および編集フォームに格納し、それを編集フォームに表示します。オプションテーブルのエントリは、用語ID 24ではtaxomomy_24_metasになります。

add_action('menu_category_edit_form_fields','menu_category_edit_form_fields');
add_action('menu_category_add_form_fields','menu_category_edit_form_fields');
add_action('edited_menu_category', 'menu_category_save_form_fields', 10, 2);
add_action('created_menu_category', 'menu_category_save_form_fields', 10, 2);

function menu_category_save_form_fields($term_id) {
    $meta_name = 'order';
    if ( isset( $_POST[$meta_name] ) ) {
        $meta_value = $_POST[$meta_name];
        // This is an associative array with keys and values:
        // $term_metas = Array($meta_name => $meta_value, ...)
        $term_metas = get_option("taxonomy_{$term_id}_metas");
        if (!is_array($term_metas)) {
            $term_metas = Array();
        }
        // Save the meta value
        $term_metas[$meta_name] = $meta_value;
        update_option( "taxonomy_{$term_id}_metas", $term_metas );
    }
}

function menu_category_edit_form_fields ($term_obj) {
    // Read in the order from the options db
    $term_id = $term_obj->term_id;
    $term_metas = get_option("taxonomy_{$term_id}_metas");
    if ( isset($term_metas['order']) ) {
        $order = $term_metas['order'];
    } else {
        $order = '0';
    }
?>
    <tr class="form-field">
            <th valign="top" scope="row">
                <label for="order"><?php _e('Category Order', ''); ?></label>
            </th>
            <td>
                <input type="text" id="order" name="order" value="<?php echo $order; ?>"/>
            </td>
        </tr>
<?php 
}
4
Aram Kocharyan

次のフックを使って、カスタムフィールドを新しい用語ページの追加画面に追加できます。

  1. {taxonomy_name} _ add_form_fields
  2. {taxonomy_name} _ edit_form_fields
  3. 編集した_ {taxonomy_name}
  4. _ {分類名}を作成します

もっと見ることができます ここ

enter image description here 

2
shishir mishra
add_filter('created_term', 'update_{custom_taxonomy}_fields'); // you can name your callback function  as you like
function update_{custom_taxonomy}_fields($term_id) {
    if($_POST['taxonomy'] == '{custom_taxonomy}'): // a simple check to see if is you tax
        //do your update (I prefer in options table, but you can do it in any way you`d like)
    endif;
}

もっと一般的なフックが欲しいなら、 "created_term"を使うことができます(少なくとも3.4から)。

1
xlad

分類マネージャ pluginに行くことができます。新しい分類法を追加したり、選択した分類法にカスタムフィールド(画像フィールドなど)を追加したりできます。

0
Dipesh KC