使用wp_ins_post将分类数据附加到POST

时间:2011-05-25 作者:MartinJJ

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

wp_dropdown_categories( array(
    \'taxonomy\'      => \'location\',
    \'hide_empty\'    => 0,
    \'orderby\'       => \'name\',
    \'order\'         => \'ASC\',
    \'name\'          => \'location\',
) );
正如您所看到的,分类法是“location”,选择名称也是“location”。

然后,我为每个分类法选择下拉列表添加变量,如so,以及post\\u title、post\\u 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 );
然而,当我提交新帖子时,所有标准帖子数据(以及我的自定义帖子类型)都正常,但分类法没有。很明显我做错了什么?

3 个回复
最合适的回答,由SO网友:Bainternet 整理而成

使用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\' );

SO网友:Tomáš Kapler

您可以使用wp_insert_post, 但您还必须在中指定分类法tax_input, 所以应该是这样的:

$item[\'tax_input\'] = array (
    \'location\'      => implode( \',\', $location ),
    \'sale_rental\'   => implode( \',\', $sale_rental ),
    \'price\'         => implode( \',\', $price ),
)
我使用implode() 因此$location 可以是具有多个术语的数组。

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

SO网友:kaiser

问题的根源

在对这个主题进行了一些研究之后,我被告知要检查内部(我做了)。当我从外部提要导入帖子作为自定义帖子类型时,我只需将用户设置为-1 (而不是添加bot用户)。我遇到的问题是wp_insert_post() 使用tax_input 设置,内部检查用户功能,而不存在的用户显然不具备该功能。

当时的解决方案是,我编写了SysBot plugin. 通过这种方式,我可以简单地将SysBot用户(具有编辑器的角色)附加到新创建的帖子上,并且一切都按照预期的方式进行。

结束

相关推荐

Taxonomy.php不显示帖子

我的函数中有以下代码。php文件创建自定义分类法和post类型。我已经在这个帖子类型中创建了一系列帖子,并为它们附加了标签。add_action( \'init\', \'create_my_post_types\' ); function create_my_post_types() { register_post_type(\'portfolio\', array( \'label\' => __(\'Portfolio\'),