Saving Taxonomy Terms

时间:2010-09-14 作者:NetConstructor.com

我有一个有趣的问题,希望有人能尽快回答。

我已经创建了自己的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>

1 个回复
最合适的回答,由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>

结束

相关推荐