我有一个有趣的问题,希望有人可以快速回答。

我创建了自己的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%的问题仍然如下:

  1. 我需要将什么添加到我的functions.php文件代码(下面列出),以便在创建/更新帖子时,从我的分类学下拉列表中选择的新值传递到数组中?

  2. 尽管在此示例中,我希望确保只能与帖子相关联,但在其他情况下,我想创建一个复选框列表,这需要我将多个值传递到数组中。这样,我需要更改什么,以便将逗号分开的项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>
许可以下: CC-BY-SA归因
scroll top