问题描述
我有一个有趣的问题,我希望有人可以快速回答。
我创建了自己的 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 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。