附加分类数据以使用wp_insert_post进行发布


17

我正在尝试实现一个前端发布系统,该系统在几个下拉选择字段中显示分类数据。在下拉菜单中的每一个通过使用“名”命名的$argwp_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 );

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

Answers:


25

wp_set_object_terms拥有每种分类的职位ID后使用:

...
$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年

很高兴我可以提供帮助:)
Bainternet,2011年

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

5

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

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

我用implode()这样,它$location可以是带有多个术语的数组。

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


2

问题的根源

在对该主题进行了一些研究之后,我被告知要检查内部结构(我这样做了)。当我从外部供稿中将帖子导入为自定义帖子类型时,我只是将用户设置为-1(而不是添加机器人用户)。我遇到的问题是,wp_insert_post()用一个tax_input集合在内部检查用户能力,这是不存在的用户显然没有的能力。

SysBot进行救援

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.