【问题标题】:PHP Import WP Terms child term into custom post typePHP 将 WP 术语子术语导入自定义帖子类型
【发布时间】:2018-03-29 07:13:42
【问题描述】:

我创建了一个导入工具,用于从 json 文件导入数据,以创建自定义帖子类型的帖子。这一切都很好,我可以导入 acf 字段以及指定的术语。我的问题是,如何导入分配给该术语的子术语。

我现在有两个变量来收集数据。我希望有变量 eventCategoryChildName 将其值作为子项分配给 eventCategoryID

  $eventCategoryChildName = $ev['OfficialCity'];
  $eventCategoryId = $ev['RegionID'];

以下是目前在没有子术语的情况下导入术语的功能:

 // set category terms
 $cat_ids = $eventCategoryName;
 // Add these categories, note the last argument is true.
 wp_set_object_terms( $post_id, $cat_ids, 'lan', true );

编辑:

所以我设法将孩子与正确的父母相关联,但他们没有被检查到帖子

    // set category terms
    $cat_ids = $eventCategoryName;

    // Import category name
    $term_taxonomy_ids = wp_set_object_terms( $post_id, $cat_ids, 'lan', true );

    $parent_term = wp_set_object_terms( $post_id, $cat_ids, 'lan', true );

    // Check terms import for errors
    if ( is_wp_error( $term_taxonomy_ids ) ) {
        // There was an error somewhere and the terms couldn't be set.
        echo $return->get_error_message();
    } else {
        // Success! These categories were added to the post.
    }


    $parent_term = term_exists( $eventCategoryName, 'lan' ); 
    wp_insert_term(
      $eventCategoryChildName,                // Customize as you wish
      'lan',
      array(
          'parent'      => $parent_term['term_id'],
          'slug'        => $eventCategoryChildName  // Customize as you wish
      )
    );

    if ( !is_wp_error( $child_term_result ) ) {
      wp_set_object_terms( $post_id, $child_term_result['term_id'], 'lan', true );
  }

【问题讨论】:

    标签: php arrays wordpress import categories


    【解决方案1】:

    首先,你应该检查wp_set_object_terms的结果,看看是否返回错误:

    $term_taxonomy_ids = wp_set_object_terms( $post_id, $cat_ids, 'lan', true );
    if ( is_wp_error( $term_taxonomy_ids ) ) {
        // There was an error somewhere and the terms couldn't be set.
        echo $return->get_error_message();
    } else {
        // Success! These categories were added to the post.
    }
    

    那么,您要添加的术语可能不存在。在这种情况下,wp_set_object_terms 将返回 invalid_taxonomy 错误。因此,您可能希望将此类缺失的术语添加到您的分类中:

    wp_insert_term(
        'Term Name',                      // Customize as you wish
        'lan',
        array(
            'description' => 'Term desc', // Customize as you wish
            'slug'        => 'lan-slug1'  // Customize as you wish
        )
    );
    
    // For child term:
    $parent_term = term_exists( 'parent_term_id', 'lan' );
    $child_term_result = wp_insert_term(
        'Child Term Name',                // Customize as you wish
        'lan',
        array(
            'parent'      => $parent_term['term_id']
            'description' => 'Term desc', // Customize as you wish
            'slug'        => 'lan-slug1'  // Customize as you wish
        )
    );
    
    // Add the child term to the post
    if ( !is_wp_error( $child_term_result ) ) {
         wp_set_object_terms( $post_id, $child_term_result['term_id'], 'lan', true );
    }
    

    最后,请确保在 - 至少 - Wordpress 的 init 挂钩之后执行此代码。例如:

    function parse_my_json() {
        // Your code here
    }
    add_action('init','parse_my_json');
    

    有用的参考资料:

    【讨论】:

    • 您好 Nicolas,感谢您写得很好的回答。不幸的是,我不确定这对我有什么帮助,因为我已经能够将术语插入数据库。我的问题是如何导入分配给导入的父术语的子术语。
    • @Fredrik 我更新了我的答案以包括子项注册。
    • 谢谢!它现在可以导入与父术语关联的子术语。问题是子术语未检查到帖子(未选择)。我已经更新了上面的代码供你查看
    • @Fredrik 我想您应该将子术语添加到您的帖子中。请查看更新后的答案。
    • 完美,做到了!非常感谢!
    猜你喜欢
    • 2018-01-08
    • 1970-01-01
    • 2016-01-18
    • 1970-01-01
    • 1970-01-01
    • 2016-08-04
    • 2016-07-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多