问题描述

我正在尝试实现一个前端发布系统,在多个下拉列表选择字段中显示分类数据。每个下拉列表都使用 wp_dropdown_categories()中的”name” $arg 命名。

wp_dropdown_categories( array(
    'taxonomy'      => 'location',
    'hide_empty'    => 0,
    'orderby'       => 'name',
    'order'         => 'ASC',
    'name'          => 'location',
) );

正如你可以看到的分类法是”location” 和选择名称也是”location” 。

然后,我添加了各种分类选择下拉列表的变量,如 post_title,post_content 等:

$title          = trim( $_POST['wpuf_post_title'] );
$content        = trim( $_POST['wpuf_post_content'] );
$tags           = wpuf_clean_tags( $_POST['wpuf_post_tags'] );
$customcategory = trim( $_POST['customcategory'] );
$cat            = trim( $_POST['cat'] );
$location       = trim( $_POST['location'] );
$sale_rental    = trim( $_POST['sale_rental'] );
$price          = trim( $_POST['price'] );

最后,我将额外的信息添加到一个数组中,准备由 wp_insert_post()发送。我非常坚持是否通过将 tax_input 添加到下面的数组中来做正确的事情,这是我从 codex 中了解的,我需要做的。

'tax-input' => array(
    $location,
    $sale_rental,
    $price
),

所以最终看起来像这样:

$my_post = array(
    'post_title'    => $title,
    'post_content'  => $content,
    'post_status'   => $post_status,
    'post_author'   => $userdata->ID,
    'post_category' => array( $_POST['cat'] ),
    'post_type'     => $customcategory,
    'tags_input'    => $tags,
    'tax_input'     => array(
        $location,
        $sale_rental,
        $price
    ),
);

$post_id = wp_insert_post( $my_post );

但是,当我提交新的帖子时,所有标准的帖子数据 (以及我的自定义帖子类型) 都可以使用,但分类不会。我显然做错了什么?

最佳解决方案

在您拥有每个分类标准后,请使用 wp_set_object_terms

...
$post_id = wp_insert_post( $my_post );
wp_set_object_terms( $post_id, $location, 'location' );
wp_set_object_terms( $post_id, $sale_rental, 'sale_rental' );
wp_set_object_terms( $post_id, $price, 'price' );

次佳解决方案

您可以使用 wp_insert_post 进行操作,但您必须在 tax_input 中指定分类法,因此应该如下所示:

$item['tax_input'] = array (
    'location'      => implode( ',', $location ),
    'sale_rental'   => implode( ',', $sale_rental ),
    'price'         => implode( ',', $price ),
)

我使用 implode(),使得 $location 可以是具有多个术语的数组。

另外,请注意,这仅适用于 non-hierarchical 分类法。对于分层分类法,您必须提供一个数组而不是一个字符串。

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。