カスタムフィールドをカテゴリに追加する


22

特定のカテゴリにカスタムフィールドを追加したいと思います。カテゴリには次のフィールドのみがあります。

名:

ナメクジ:

親:

説明:

テレビシリーズサイトがあるので、新しいカテゴリ(Category = Series)を作成するときに、さらにフィールドを追加したい、このようなものが欲しい

名:

アーティスト:

年:

タイプ:

ジャンル:

概要:

ナメクジ:

親:

説明:

等々...

助けてください?前もって感謝します。



これを行うときに使用するチートシートを次に示します。関連するアクションフックとフィルターが1つの短いリストにあります。charlestonsw.com/...
ランスクリーブランド

回答:


24

1週間前にHow Toを投稿しましたhttp://en.bainternet.info/2011/wordpress-category-extra-fields

お役に立てれば。

ああ


投稿の詳細は次のとおりです。

最初に行う必要があるのは、フックedit_category_form_fieldsを使用してカテゴリ編集フォームに追加フィールドを追加し、追加フィールドを出力する単純な関数を使用することです。

<?php
//add extra fields to category edit form hook
add_action ( 'edit_category_form_fields', 'extra_category_fields');

//add extra fields to category edit form callback function
function extra_category_fields( $tag ) {    //check for existing featured ID
    $t_id = $tag->term_id;
    $cat_meta = get_option( "category_$t_id");
?>
<tr class="form-field">
<th scope="row" valign="top"><label for="cat_Image_url"><?php _e('Category Image Url'); ?></label></th>
<td>
<input type="text" name="Cat_meta[img]" id="Cat_meta[img]" size="3" style="width:60%;" value="<?php echo $cat_meta['img'] ? $cat_meta['img'] : ''; ?>"><br />
        <span class="description"><?php _e('Image for category: use full url with '); ?></span>
    </td>
</tr>
<tr class="form-field">
<th scope="row" valign="top"><label for="extra1"><?php _e('extra field'); ?></label></th>
<td>
<input type="text" name="Cat_meta[extra1]" id="Cat_meta[extra1]" size="25" style="width:60%;" value="<?php echo $cat_meta['extra1'] ? $cat_meta['extra1'] : ''; ?>"><br />
        <span class="description"><?php _e('extra field'); ?></span>
    </td>
</tr>
<tr class="form-field">
<th scope="row" valign="top"><label for="extra2"><?php _e('extra field'); ?></label></th>
<td>
<input type="text" name="Cat_meta[extra2]" id="Cat_meta[extra2]" size="25" style="width:60%;" value="<?php echo $cat_meta['extra2'] ? $cat_meta['extra2'] : ''; ?>"><br />
        <span class="description"><?php _e('extra field'); ?></span>
    </td>
</tr>
<tr class="form-field">
<th scope="row" valign="top"><label for="extra3"><?php _e('extra field'); ?></label></th>
<td>
        <textarea name="Cat_meta[extra3]" id="Cat_meta[extra3]" style="width:60%;"><?php echo $cat_meta['extra3'] ? $cat_meta['extra3'] : ''; ?></textarea><br />
        <span class="description"><?php _e('extra field'); ?></span>
    </td>
</tr>
<?php
}

ご覧のとおり、4つの新しいフィールドを追加し、それらはすべてCat_meta [key]配列にあります。これは、オプションテーブルの行に作成して、各フィールドの行ではなく、カテゴリのすべての追加フィールドを保存するためです

次に、ユーザーがカテゴリ編集フォームを送信したら、追加フィールドをデータベースに保存する必要があります。「edited_category」を使用して、送信された各フィールドを実行し、update_option関数を使用してデータベースに挿入します。 、 このような:

<?php
// save extra category extra fields hook
add_action ( 'edited_category', 'save_extra_category_fileds');

// save extra category extra fields callback function
function save_extra_category_fileds( $term_id ) {
    if ( isset( $_POST['Cat_meta'] ) ) {
        $t_id = $term_id;
        $cat_meta = get_option( "category_$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];
            }
        }
        //save the option array
        update_option( "category_$t_id", $cat_meta );
    }
}

上記のコードから、追加したすべての追加フィールドが 'category_ID'という名前でデータベースのオプションテーブルに格納されていることがわかります。IDは、編集したばかりの特定のカテゴリのIDであり、これを呼び出すことができますget_option関数を使用して、プラグインまたはテーマファイルのデータを簡単に取得できます。

たとえば、カテゴリIDが25の場合、コードは次のようになります

<?php $cat_data = get_option('category_25'); ?>

冒頭で述べたように、カテゴリごとに異なる画像を表示する必要があるため、その場合、カテゴリタイトルを表示するコードの直後に、これらの数行のコードをテーマのcategory.phpに追加しました。

<?php
//first get the current category ID
$cat_id = get_query_var('cat');

//then i get the data from the database
$cat_data = get_option("category_$cat_id");

//and then i just display my category image if it exists
if (isset($cat_data['img'])){
    echo '<div class="category_image"><img src="'.$cat_data['img'].'"></div>';
}

素晴らしく簡単です。すべて完了です。結果は次のようになります。

ここに画像の説明を入力してください


4
ブログのメインコンテンツをこの回答に投稿してください。リンクの腐敗は、自分のブログでも発生する可能性があります。
ジャンゴラインハルト

1
これは2011 buddyで回答されました:)
Bainternet

1
あなたのポイントは?
ジャンゴラインハルト

4
この回答に価値がないと思われる場合は、削除する必要があります...ただし、この質問には16,000以上のビューがあります。この質問は、その年齢にもかかわらず、人々にとって有用なままであり、この回答は、問題のリンクの詳細を含めることで改善されると思います。
ジャンゴラインハルト

4
...皆さんが議論に忙しかった間(1年前ですが)、すべてを答えに導くのに5分もかかりませんでした。簡単です
...-MxmastaMills

18

Wordpress 4.4の時点で、add_term_meta()update_term_meta()およびget_term_meta()関数が追加されました。これは、MxmastaMillsが提供するコードを更新して、はるかにハッキングの少ないアプローチを使用できることを意味します。

これが私の更新です。カスタムタイトルを追加したかったフィールドは1つだけですが、追加するすべてのフィールドで同じように機能します。

function addTitleFieldToCat(){
    $cat_title = get_term_meta($_POST['tag_ID'], '_pagetitle', true);
    ?> 
    <tr class="form-field">
        <th scope="row" valign="top"><label for="cat_page_title"><?php _e('Category Page Title'); ?></label></th>
        <td>
        <input type="text" name="cat_title" id="cat_title" value="<?php echo $cat_title ?>"><br />
            <span class="description"><?php _e('Title for the Category '); ?></span>
        </td>
    </tr>
    <?php

}
add_action ( 'edit_category_form_fields', 'addTitleFieldToCat');

function saveCategoryFields() {
    if ( isset( $_POST['cat_title'] ) ) {
        update_term_meta($_POST['tag_ID'], '_pagetitle', $_POST['cat_title']);
    }
}
add_action ( 'edited_category', 'saveCategoryFields');

2
注意すべき点はほとんどありません。edited_categoryフックでtag_IDは、$_POST配列ではなく、配列になり$_GETます。またadd_term_meta、古いエントリを上書きする代わりに、実際に新しいエントリを追加します。update_term_meta代わりに使用してください。
マーティンディミトロフ

@MartinDimitrov編集ボタンをクリックして、ルークシモンズの答えを修正できますか?これにより、誰もが最高のコードを使用できるようになります(コードがあまり上手ではない場合でも)(デザイナーです!)。ありがとうございました!
ヒューゴ

1
データをフォームに保存しません
開発

@Devはデータを保存しますが、2行目で$ _POSTを$ _GETに変更しない限り、表示しません。
banesto

3

このコードは機能します:

add_action ( 'edit_category_form_fields', function( $tag ){
    $cat_title = get_term_meta( $tag->term_id, '_pagetitle', true ); ?>
    <tr class='form-field'>
        <th scope='row'><label for='cat_page_title'><?php _e('Category Page Title'); ?></label></th>
        <td>
            <input type='text' name='cat_title' id='cat_title' value='<?php echo $cat_title ?>'>
            <p class='description'><?php _e('Title for the Category '); ?></p>
        </td>
    </tr> <?php
});
add_action ( 'edited_category', function() {
    if ( isset( $_POST['cat_title'] ) )
        update_term_meta( $_POST['tag_ID'], '_pagetitle', $_POST['cat_title'] );
});

これは他のものよりも不格好ではなく、WordPress 5.2.2で検証しました
nico gawenda

1

Paul Menardは、ブログで用語メタを作成および使用する方法の例を提供しました...
WordPress 3.0の新しい分類法のカスタムメタ

DBテーブルを作成したり、$_POST変数が設定されていることを確認したりする例はないので、自分でこれらのささいなことを行う必要がありますが、...

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.