私は独自の分類法を持つカスタム投稿タイプを持っています。基本的に 'show venues'が投稿タイプで、開催地地域が分類法です。
会場が複数の地域に存在する様子を見て、デフォルトのメタボックスを削除し、wp_dropdown_categories()
を使用してドロップダウンとして自分自身を追加しました。分類項目は出力されていて、希望どおりに表示されていますが、送信されていません。ドロップダウンリストには、送信後の選択が保持されていません。私は元のメタボックスのさまざまな属性を見ることができる限りドロップダウンにそれらを適用しようとしましたが、私は少しの喜びも持っていませんでした。
私はいくつかのWPSE上の さまざまな の投稿を見て、 havent は私が間違っているところを見逃していました。
誰かが私の次のステップは何であるべきか/ Imが欠けているのは何なのかについて詳しく述べることができますか?
<?php
// remove the default taxononomy
add_action( 'admin_menu', 'tr_remove_meta_box');
function tr_remove_meta_box(){
remove_meta_box('venue-regiondiv', 'venue', 'normal');
}
//Add new taxonomy meta box
add_action( 'add_meta_boxes', 'tr_add_meta_box');
function tr_add_meta_box() {
add_meta_box( 'venue-region-dropdowndiv', 'What region is this venue in?','tr_venuesTaxonomydropdown_metabox','venue' ,'side','core');
}
//Callback to set up the metabox
function tr_venuesTaxonomydropdown_metabox( $post ) {
$taxonomy = 'venue-region';
//The name of the form
$name = 'tax_input[' . $taxonomy . '][]';
$id = $taxonomy.'dropdown';
//Get current and popular terms
$postterms = get_the_terms( $post->ID,$taxonomy );
$current = ($postterms ? array_pop($postterms) : false);
$current = ($current ? $current->term_id : 0);
?>
<div id="taxonomy-<?php echo $taxonomy; ?>" class="categorydiv">
<!-- Display taxonomy terms -->
<div id="<?php echo $taxonomy; ?>-all" class="tabs-panel">
<?php $args = array(
'show_option_all' => 'Choose a region',
'show_option_none' => '',
'orderby' => 'ID',
'order' => 'ASC',
'show_count' => 0,
'hide_empty' => 0,
'child_of' => 0,
'exclude' => '',
'echo' => 1,
'selected' => 1,
'hierarchical' => 1,
'name' => $name,
'id' => $id,
'class' => 'form-no-clear',
'depth' => 0,
'tab_index' => 0,
'taxonomy' => $taxonomy,
'hide_if_empty' => true
); ?>
<?php wp_dropdown_categories($args); ?>
</div>
</div>
<?php
}
投稿IDを取得
$post_id=get_the_ID();
選択した地域を取得
$terms = wp_get_post_terms( $post_id, $taxonomy );
$selected_id='';
if(isset($terms[0]->term_id)){
$selected_id=$terms[0]->term_id;
}
階層型ドロップダウンを作成します
wp_dropdown_categories( array(
'show_option_all' => 'Choose a region',
'show_option_none' => '',
'orderby' => 'ID',
'order' => 'ASC',
'show_count' => 0,
'hide_empty' => 0,
'child_of' => 0,
'exclude' => '',
'echo' => 1,
'selected' => $selected_id,
'hierarchical' => 1,
'name' => 'tax_input['.$taxonomy.'][]', // important
'id' => $id,
'class' => 'form-no-clear',
'depth' => 0,
'tab_index' => 0,
'taxonomy' => $taxonomy,
'hide_if_empty' => true
) );
wp_dropdown_categories()
関数を使用すると、選択したカテゴリIDを割り当てるselected
という名前のパラメータを使用できます。保存しやすくするために、選択の名前も標準化する必要があります。
$selected_id = get_post_meta( $post->ID, 'selected_tax', true );
wp_dropdown_categories( array(
'show_option_all' => 'Choose a region',
'show_option_none' => '',
'orderby' => 'ID',
'order' => 'ASC',
'show_count' => 0,
'hide_empty' => 0,
'child_of' => 0,
'exclude' => '',
'echo' => 1,
'selected' => $selected_id,
'hierarchical' => 1,
'name' => 'selected_tax',
'id' => $id,
'class' => 'form-no-clear',
'depth' => 0,
'tab_index' => 0,
'taxonomy' => $taxonomy,
'hide_if_empty' => true
) );
ポストメタを保存し、ポストメタを取得する必要があります(get_post_meta()
経由)。あなたの例では、常に選択された用語ではないかもしれない最初の用語を得ているようです。それから引数で$selected_id
をselected
インデックスに割り当てます。