我一直在开发一个自定义表单,将帖子插入到 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,它是相关的网站 -
但它并没有将分类类别分配给帖子。
使用操作挂钩对每个注册进行排序。
顺序
register_taxonomy()
在 register_post_type()
之前执行。
调用
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 );