将 WordPress 自定义分类类别分配给自定义帖子类型

问题描述 投票:0回答:1

我一直在开发一个自定义表单,将帖子插入到 WordPress 中的自定义帖子类型中。我需要在这篇文章中分配自定义分类类别。

这是注册的自定义分类法 -

// Portfolio Category
$portfolio_cat_tax = array(
    'name' => 'Portfolio Category',
    'singular_name' => 'Portfolio Category',
    'search_items' => 'Search Category',
    'all_items' => 'All Category',
    'edit_item' => 'Edit Category',
    'update_item' => 'Update Category',
    'add_new_item' => 'Add New Category',
    'new_item_name' => 'New Category',
    'menu_name' => 'Portfolio Category',
);

$portfolio_cat_tax_args = array(
    'hierarchical' => true,
    'labels' => $portfolio_cat_tax,
    'show_ui' => true,
    'show_admin_column' => true,
    'query_var' => 'portfolio_category',
    'rewrite' => array('slug' => 'portfolio-category'),
);

register_taxonomy('portfolio_category', 'portfolio', $portfolio_cat_tax_args);

这是注册的自定义帖子类型 -

// Portfolio post type
$khs_portfolio_labels = array(
    'name'                  => __( 'Portfolio', 'khs' ),
    'singular_name'         => __( 'Portfolio', 'khs' ),
    'menu_name'             => __( 'Portfolio', 'khs' ),
    'name_admin_bar'        => __( 'Portfolio', 'khs' ),
    'add_new'               => __( 'Add Portfolio', 'khs' ),
    'add_new_item'          => __( 'New Portfolio', 'khs' ),
    'new_item'              => __( 'New Portfolio', 'khs' ),
    'edit_item'             => __( 'Edit Portfolio', 'khs' ),
);

$khs_portfolio_args = array(
    'labels'             => $khs_portfolio_labels,
    'public'             => true,
    'publicly_queryable' => true,
    'show_ui'            => true,
    'show_in_menu'       => true,
    'query_var'          => true,
    'rewrite'            => array( 'slug' => 'portfolio' ),
    'has_archive'        => false,
    'hierarchical'       => true,
    'menu_icon'          => 'dashicons-portfolio',
    'menu_position'      => null,
    'supports'           => array( 'title', 'thumbnail' ),
    'taxonomies' => array('portfolio_category'),
    
);

register_post_type('portfolio', $khs_portfolio_args);

这是我尝试过的表单数据提交代码-

// Handle Submit Portfolio
if ($_SERVER["REQUEST_METHOD"] == "POST" && isset($_POST["agency_portfolio_submit"])) {
    $khs_project_name = sanitize_text_field($_POST["project_name"]);
    $khs_portfolio_category = $_POST["selected_agency_portfolio_category"];
    $khs_portfolio_link = sanitize_text_field($_POST["portfolio_link"]);

    // Insert the post
    $khs_portfolio_post = array(
        'post_title'    => $khs_project_name,
        'post_status'   => 'publish',
        'post_author'   => get_current_user_id(),
        'post_type'     => 'portfolio',
        'meta_input'    => [
            'portfolio_link'  => $khs_portfolio_link,
            'selected_agency_portfolio_category'    =>  $khs_portfolio_category
        ],
        'tax_input'     => array(
            'portfolio_category' => $khs_portfolio_category,
        ),
    );

    $khs_portfolio_post_id = wp_insert_post($khs_portfolio_post);
    wp_set_object_terms($khs_portfolio_post_id, $khs_portfolio_category, "portfolio-category");

    // Handle the thumbnail upload
    if ($_FILES['portfolio_thumbnail']['size'] > 0) {
        require_once(ABSPATH . 'wp-admin/includes/image.php');
        require_once(ABSPATH . 'wp-admin/includes/file.php');
        require_once(ABSPATH . 'wp-admin/includes/media.php');
        
        $attachment_id = media_handle_upload('portfolio_thumbnail', $khs_portfolio_post_id);
        set_post_thumbnail($khs_portfolio_post_id, $attachment_id);
    }
}

我尝试过

tax_input
wp_set_object_terms
wp_set_post_terms
,但它对我不起作用。
$khs_portfolio_category
返回一组分类 ID。

自定义帖子类型和自定义分类功能或其他功能是否有任何混乱?

我也尝试过一些 stackoverflow,它是相关的网站 -

堆栈溢出

Wordpress StackExchange

但它并没有将分类类别分配给帖子。

php wordpress custom-post-type custom-taxonomy
1个回答
0
投票
  1. 使用操作挂钩对每个注册进行排序。

  2. 顺序

    register_taxonomy()
    register_post_type()
    之前执行。

  3. 调用

    register_taxonomy()
    时,将$post_type参数设置为null


使用动作挂钩

例如,对

$portfolio_cat_tax
$portfolio_cat_tax_args
的赋值以及对
register_taxonomy()
的调用都应该包含在一个函数中。此函数充当
init
操作挂钩的处理程序。操作挂钩必须设置
register_taxonomy()
的优先级才能在
register_post_type()
之前执行。

示例:

// Portfolio Category
function register_my_custom_taxonomy() {
    $portfolio_cat_tax = array(
        'name' => 'Portfolio Category',
        'singular_name' => 'Portfolio Category',
        'search_items' => 'Search Category',
        'all_items' => 'All Category',
        'edit_item' => 'Edit Category',
        'update_item' => 'Update Category',
        'add_new_item' => 'Add New Category',
        'new_item_name' => 'New Category',
        'menu_name' => 'Portfolio Category',
    );

    $portfolio_cat_tax_args = array(
        'hierarchical' => true,
        'labels' => $portfolio_cat_tax,
        'show_ui' => true,
        'show_admin_column' => true,
        'query_var' => 'portfolio_category',
        'rewrite' => array('slug' => 'portfolio-category'),
    );

    register_taxonomy('portfolio_category', null, $portfolio_cat_tax_args);
}
add_action( 'init', 'register_my_custom_taxonomy', 10 );
// Portfolio post type
function register_my_custom_post_type() {
    $khs_portfolio_labels = array(
        'name'                  => __( 'Portfolio', 'khs' ),
        'singular_name'         => __( 'Portfolio', 'khs' ),
        'menu_name'             => __( 'Portfolio', 'khs' ),
        'name_admin_bar'        => __( 'Portfolio', 'khs' ),
        'add_new'               => __( 'Add Portfolio', 'khs' ),
        'add_new_item'          => __( 'New Portfolio', 'khs' ),
        'new_item'              => __( 'New Portfolio', 'khs' ),
        'edit_item'             => __( 'Edit Portfolio', 'khs' ),
    );

    $khs_portfolio_args = array(
        'labels'             => $khs_portfolio_labels,
        'public'             => true,
        'publicly_queryable' => true,
        'show_ui'            => true,
        'show_in_menu'       => true,
        'query_var'          => true,
        'rewrite'            => array( 'slug' => 'portfolio' ),
        'has_archive'        => false,
        'hierarchical'       => true,
        'menu_icon'          => 'dashicons-portfolio',
        'menu_position'      => null,
        'supports'           => array( 'title', 'thumbnail' ),
        'taxonomies' => array('portfolio_category'),
        
    );

    register_post_type('portfolio', $khs_portfolio_args);
}
add_action( 'init', 'register_my_custom_post_type', 20 );
© www.soinside.com 2019 - 2024. All rights reserved.