我有一个有趣的问题,希望有人能尽快回答。
我已经创建了自己的metabox,它基于“我的metabox代码”(下面的列表)正确地显示了我创建的“event\\u types”分类中所有术语的下拉列表。
我遇到的问题是,当从下拉列表中选择不同的术语并更新帖子时,能够保存/更新与帖子相关的术语。
在对各种代码位进行修补之后,我发现通过手动将term\\u ID number[用逗号分隔]输入数组区域,我得到了我想要的结果。
例如,如果在保存帖子时,函数将调用此代码
wp_set_post_terms( $post_id, array(5,7), \'event_types\', FALSE);
然后,我的帖子将更新并关联term\\u ID 5&;7正如你所看到的,我正在通过阵列。问题是这是硬编码到我的函数中的。php文件,而不是基于用户选择的下拉列表值(注意:我实际上只想传递一个ID,但我做了两个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%的问题如下:
我需要向我的函数添加什么。php文件代码(如下所列),以便在创建/更新帖子时,从分类法下拉列表中选择的新值会传递到数组中?
尽管在本例中,我希望确保只有一个分类法可以与一篇文章相关联,但在其他情况下,我希望创建一个复选框列表,这需要我向数组中传递多个值。因此,我需要做哪些更改,以便将以逗号分隔的术语ID列表传递到数组中?如果您的答案涉及使用上面列出的示例代码的部分或部分代码,我在其中回显ID,那么如何确保打印的最后一个ID的末尾没有逗号?(有其他/更好的方法吗?我看到了可能与添加过滤器有关的提示,但我不确定如何做到这一点……)
提前非常感谢大家-下面是我目前在每个文件中使用的代码。
CODE IN MY FUNCTIONS.PHP FILE
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);
}
MY METABOX CODE
<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>
最合适的回答,由SO网友:NetConstructor.com 整理而成
我想在迪马斯能够帮助我之后,我会发布这个问题的答案。
利用他的WPAlchemey类,我添加了一个save\\u 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);
}
显示分类法下拉列表的my 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>