我目前正在一个 woocommerce 网站上工作,我需要将我的产品类别保存到用户的个人资料中,并且我遇到了如何保存的问题。我已经成功地提取了类别列表并将其显示为一个表单,其中类别显示在复选框列表中。当我保存表单时,数据库会更新,但我必须刷新页面才能让表单显示更新。此外,一旦将一个项目保存到配置文件中,它就不允许我删除所有选定的项目。
- 如何让表单在保存表单后立即显示更新的内容?
- 如何允许用户取消选中所有类别?
我对 wordpress/woocommerce 开发相当陌生,所以我不确定我错过了什么。任何帮助将不胜感激。
这是我的代码(从多个来源编译并修改):
//Add tab to my account page
function foobar_add_categories_link_my_account( $items ) {
$items['account-categories'] = 'Account Categories';
return $items;
}
add_filter( 'woocommerce_account_menu_items', 'foobar_add_categories_link_my_account');
//Account Categories tab content
function foobar_account_category_content() {
$user_id = get_current_user_id();
$data = get_the_author_meta( 'user_categories', $user_id );
$args = array( 'hide_empty' =>0 );
$categories = get_terms( 'product_cat', $args );
$nocat_msg = __('You currently have no categories selected');
if ( !empty( $_POST['user_categories'] ) ){
update_user_meta( $user_id, 'user_categories', $_POST['user_categories'] );
}
if ( empty($data) ) {
echo '<p>'. $nocat_msg .'</p>';
}
echo '<form class="woocommerce-EditAccountCategories edit-account" action="" method="post"><label for="user_categories">Your Teams</label> <ul class="no-bullets account-category-list">';
if ($categories){
foreach ( $categories as $category ){
if(in_array($category->term_id,(array)$data)) {
$selected = 'checked="checked""';
} else {
$selected = '';
}
echo '<li class="user-category"><input name="user_categories[]" value="'.$category->term_id.'" '.$selected.' type="checkbox"/>'.$category->name.'</li>';
}
}
echo '</ul> <button type="submit" class="woocommerce-Button button" name="save_account_categories" value="Save changes">Save changes</button><input type="hidden" name="action" value="save_account_categories"></form>';
}
add_action( 'woocommerce_account_account-categories_endpoint', 'foobar_account_category_content' );
这是帮助我显示产品类别的最初文章 - https://wordpress.stackexchange.com/questions/28407/adding-custom-user-profile-data-based-upon-categories