-
16-10-2019 - |
题
我有一个有趣的问题,希望有人可以快速回答。
我创建了自己的metabox,基于“我的metabox代码”(下面列表),它正确地显示了我创建的“ event_types”分类法中所有条款的下拉列表。
我遇到问题的地方是能够保存/更新与帖子关联的术语,当从下拉列表中选择不同的项并更新帖子。
修补了各种代码位后,我能够弄清楚,通过手动将术语_id编号[由逗号分隔]到阵列区域中,我将获得我想要的结果。
例如,如果保存帖子,函数是为了调用此代码
wp_set_post_terms( $post_id, array(5,7), 'event_types', FALSE);
然后,我的帖子将更新并将术语_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最终没有逗号? (是否有不同/更好的方法?我看到了可能与添加过滤器有关的提示,但我不确定这是如何完成的...)
非常感谢你们 - 以下是我当前在每个文件中使用的代码。
我的functions.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);
}
我的Metabox代码
<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类我添加了一个看起来像这样的save_action var(请注意,我正在使用“类别”的分类法,当然您可以将哪种自定义分类法更改为):
'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>