問題描述
我有一個有趣的問題,我希望有人可以快速回答。
我建立了自己的 metabox,它基於 「MY METABOX CODE」(下面的列表) 正確顯示了我建立的”event_types” 分類中的所有條款的下拉式清單。
遇到問題的地方是從下拉式清單中選擇不同的術語並更新帖子後,能夠儲存/更新與帖子相關聯的術語。
在修改各種程式碼位後,我能夠透過 MANUALLY 輸入 term_ID 數字 (用逗號分隔) 到陣列區域,我得到了我正在尋找的結果。
例如,如果儲存帖子一個函式是呼叫這個程式碼
wp_set_post_terms( $post_id, array(5,7), 'event_types', FALSE);
那麼我的帖子將會更新,並將 term_ID 5& 7,你可以看到我正在傳遞陣列。問題是這是硬編碼到我的 functions.php 檔案,而不是基於使用者選擇的下拉式清單值 (注意:我實際上只是嘗試傳遞一個 ID,但我做了兩個測試,如下所述) 。
我也可以弄清楚,如果我新增以下程式碼到我的 metabox 檔案,那麼我可以回顯一個分配的術語 ID 的列表,但最後一個專案有一個逗號。
<?php $event_types = wp_get_object_terms($post->ID, 'event_types');
foreach ($event_types as $event_type) { echo $event_type->term_id . ','; } ?>
所以… 似乎我有 85%的問題解決了。剩下 15%的問題依然如下:
-
我需要新增到我的 functions.php 檔案程式碼 (如下所列),以便當我建立/更新一個帖子時,從我的分類法下拉式清單中選擇的新值被傳遞到陣列中?
-
雖然在這個例子中,我希望確保只有一個單一的分類法可以與一個帖子相關聯,但還有其他情況下,我想建立一個核取方塊列表,這將需要我將多個值傳遞到陣列中。這樣,我需要改變什麼,以便將逗號分隔的術語 ID 列表傳遞到陣列?如果您的答案涉及使用上面列出的部分或部分示例程式碼,那麼我會回覆 ID,那麼如何確保列印的最後一個 ID 最後沒有逗號? (有不同的/更好的方式來做嗎?我看到提示可能與新增過濾器有關,但我不知道這是如何完成的…)
非常感謝你們 – 以下是我目前在每個檔案中使用的程式碼。
我的功能程式碼.PHP 檔案
function save_event_taxonomy_terms($meta, $post_id) {
$event_types = wp_get_object_terms($post->ID, 'event_types');
wp_set_post_terms( $post_id, array($names), 'event_types', FALSE);
}
我的程式碼程式碼
<select name='post_event_types' id='post_event-types'>
// DISPLAY TERMS AS DROP DOWN OPTIONS
<?php
$names = wp_get_object_terms($post->ID, 'event_types');
$event_types = get_terms('event_types', 'hide_empty=0');
?>
<option class='event_type-option' value='' <?php if (!count($names)) echo "selected";?>>Not Assigned</option>
<?php foreach ($event_types as $event_type) {
if (!is_wp_error($names) && !empty($names) && !strcmp($event_type->slug, $names[0]->slug))
echo "<option class='event_type-option' value='" . $event_type->slug . "' selected>" . $event_type->name . "</option>n";
else
echo "<option class='event_type-option' value='" . $event_type->slug . "'>" . $event_type->name . "</option>n";
}
?>
</select>
最佳解決方案
我想我會在 Dimas 幫助我之後釋出答案。
利用他的 WPAlchemey Class 我新增了一個 save_action var,看起來像這樣 (注意我正在使用分類法為”category”,當然,你可以改變到任何您的自定義分類法)
'save_action' => 'save_taxonomy_terms',
然後我新增以下函式:
function save_taxonomy_terms($meta, $post_id) {
wp_set_post_terms($post_id, array($meta['my_terms']), 'category', FALSE);
}
我的 metabox 程式碼顯示分類法的下拉式清單如下所示:
<label>Event Category:</label>
<?php $terms = get_terms('category', 'hide_empty=0'); ?>
<?php $mb->the_field('my_terms'); ?>
<select name="<?php $mb->the_name(); ?>">
<option value='' <?php if (!count($terms)) echo "selected";?>>Not Assigned</option>
<?php foreach ($terms as $term): ?>
<option value="<?php echo $term->term_id; ?>"<?php $mb->the_select_state($term->term_id); ?><?php echo '>' . $term->name; ?></option>
<?php endforeach; ?>
</select>
參考文獻
注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。