web-dev-qa-db-ja.com

デフォルトのWordPress分類法(Tag) - フォームにカスタムフィールドを追加してデータベースに保存する方法

これにより、フィールドが新しいタグの追加フォームに追加されます。

function tag_add_form_fields ( $taxonomy ){
    ?>
    <div class="form-field term-colorpicker-wrap">
        <label for="term-colorpicker">Category Color</label>
        <input type="color" name="_tag_color" value="#737373" class="colorpicker" id="term-colorpicker" />
        <p>This is the field description where you can tell the user how the color is used in the theme.</p>
    </div>
        <?php 
}
add_action('add_tag_form_fields','tag_add_form_fields');

これにより、フィールドがタグ編集フォームに追加されます。

function tag_edit_form_fields ( $term ) {

    $color = get_term_meta( $term->term_id, '_tag_color', true );
    $color = ( ! empty( $color ) ) ? "#{$color}" : '#737373';

?>
    <tr class="form-field term-colorpicker-wrap">
        <th scope="row"><label for="term-colorpicker">Severity Color: <?php echo $color; ?></label></th>
        <td>
            <input type="color" name="_tag_color" value=" <?php echo $color; ?>" class="colorpicker" id="term-colorpicker" />
            <p class="description">This is the field description where you can tell the user how the color is used in the theme.</p>
        </td>
    </tr>

    <?php
 }
add_action('edit_tag_form_fields','tag_edit_form_fields');

これは機能していない部分です。データベースからのデータの保存と取得

function save_termmeta_tag( $term_id ) {

     // Save term color if possible
    if( isset( $_POST['_tag_color'] ) && ! empty( $_POST['_tag_color'] ) ) {
        update_term_meta( $term_id, '_tag_color', sanitize_hex_color_no_hash( $_POST['_tag_color'] ) );
    } else {
        delete_term_meta( $term_id, '_tag_color' );
    }

}

add_action( 'created_tag', 'save_termmeta_tag' );
add_action( 'edited_tag',  'save_termmeta_tag' ); 

アクションフックが正しくないと思います。

言うまでもなく、コードはもともと別の投稿された質問からのものです。私はちょうど私のニーズに合うようにそれを微調整しました。

Colorpickerフィールドをカテゴリに追加

1

更新と保存にはadd_action( 'edit_term', 'save_termmeta_tag' );を使います

2
Ben

実は今も使いたかったのです。基本的に、これは実際にタグで機能するインターネット上の唯一の場所です。

私はそれでいくつかの問題を発見し、それを編集することに成功し、今私のために動作します:

  1. ここでは、スペース文字も値に保存しています

        <input type="color" name="_tag_color" value=" <?php echo $color; ?>" 
    

->削除されたスペース

<input type="color" name="_tag_color" value=" <?php echo $color; ?>"
  1. ベンからの支援があってもそれを知った。保存はまだ機能せず、どういうわけかあなたのデフォルトの色がそこにあります。私は運で見つけました-しかし、私は今、理由はありません、サニタイズ方法はそれを保存せずに混乱させています。

    sanitize_hex_color_no_hash()

したがって、基本的に削除した場合、正常に動作し始めました。

function save_termmeta_tag( $term_id ) {

    // Save term color if possible
    if( isset( $_POST['_tag_color'] ) && ! empty( $_POST['_tag_color'] ) ) {
        update_term_meta( $term_id, '_tag_color',  $_POST['_tag_color'] );
    } else {
        delete_term_meta( $term_id, '_tag_color' );
    }

}

add_action( 'edit_term', 'save_termmeta_tag' );は必要ありません

UPDATE後で、別のメソッドに配置する前にサニタイズすると、役立つことがわかりました

 // Save term color if possible
if( isset( $_POST['_tag_color'] ) && ! empty( $_POST['_tag_color'] ) ) {
    $sanitized_color = sanitize_hex_color_no_hash($_POST['_tag_color']);
    update_term_meta( $term_id, '_tag_color', $sanitized_color );
} else {
    delete_term_meta( $term_id, '_tag_color' );
}
0
David Salcer