特定のカテゴリにカスタムフィールドを追加したいです。カテゴリには次のフィールドしかありません。
名:
スラッグ:
親:
説明:
私はTVシリーズサイトを持っているので、私は私が新しいカテゴリー(Category = Series)を作るとき、私はもう少しフィールドを加えたい、私はこのようなものが欲しい
名:
アーティスト:
年:
タイプ:
ジャンル:
概要:
スラッグ:
親:
説明:
等々...
何か助けてください?前もって感謝します。
私は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]配列になっています。これは、各フィールドの行ではなく、カテゴリのすべての追加フィールドを保存するためです。
次に、ユーザーがカテゴリー編集フォームを送信したら、余分なフィールドをデータベースに保存する必要があります。送信された各フィールドを処理して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 );
}
}
上記のコードから、追加したすべての追加フィールドがデータベースのoptionsテーブルに '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>';
}
素晴らしく、簡単で、私たちはすべて完了しました。結果は次のようになります。
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');
このコードは動作します:
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'] );
});
Paul Menardが、自分のブログで用語メタの作成方法と使用方法の例を示しました。
WordPress 3.0の新しい分類法のカスタムメタ 。
DBテーブルを作成したり$_POST
varsが設定されていることをチェックする例はありませんので、ささいなことを自分で行う必要がありますが、それは上に構築するのに適当なコードベースのように見えます... :)