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

wp_dropdown_categories( array(
    'taxonomy'      => 'location',
    'hide_empty'    => 0,
    'orderby'       => 'name',
    'order'         => 'ASC',
    'name'          => '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添加到下面的数组中来做正确的事情感到很困惑,因为这是我从编解码器中了解到的需要做的事情。

'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 );


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

#1 楼

在获得每种分类法的职位ID后,请使用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' );


评论


我只是不知道如果没有您的帮助,我将在哪里工作,这是第一次工作……非常感谢Bainternet。标记为已回答

– MartinJJ
2011年5月25日下午14:45

很高兴我能帮助你 :)

–互联网
2011年5月25日下午14:50

是$ location和$ sale_rental整数或字符串数​​组?

–道格
14-10-23在21:47

#2 楼

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

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


我使用implode()以便$location可以是包含多个术语的数组。

另外,请注意,这仅适用于非分层分类法。对于分层分类法,必须提供一个数组而不是astring。

#3 楼

问题的根源

经过对该主题的研究,我被告知要检查内部结构(我这样做了)。当我从外部供稿中导入帖子作为自定义帖子类型时,我只需将用户设置为-1(而不是添加bot用户)。我遇到的问题是设置了wp_insert_post()tax_input,在内部检查用户功能,这是不存在的用户显然没有的功能。

SysBot进行救援

然后的解决方案是我编写了SysBot插件。这样,我可以简单地将SysBot用户(具有编辑角色)附加到新创建的帖子上,一切按预期的方式进行。