Php 美国允许州通过Woocommerce自定义设置页面
我有一个函数,可以获取美国州列表,并从中删除我们不销售的州。在创建订单、账单和发货状态下拉列表等时,这可以很好地从多个区域删除状态 这就是这个函数Php 美国允许州通过Woocommerce自定义设置页面,php,wordpress,woocommerce,settings,state,Php,Wordpress,Woocommerce,Settings,State,我有一个函数,可以获取美国州列表,并从中删除我们不销售的州。在创建订单、账单和发货状态下拉列表等时,这可以很好地从多个区域删除状态 这就是这个函数 function wc_sell_only_states($states) { $states_not_allowed['US'] = array( 'AL' => __('Alabama', 'woocommerce'), 'AR' => __('Arkansas', 'woocommerce'
function wc_sell_only_states($states) {
$states_not_allowed['US'] = array(
'AL' => __('Alabama', 'woocommerce'),
'AR' => __('Arkansas', 'woocommerce'),
'MD' => __('Maryland', 'woocommerce'),
'MI' => __('Michigan', 'woocommerce'),
'MO' => __('Missouri', 'woocommerce'),
'MS' => __('Mississippi', 'woocommerce'),
'NJ' => __('New Jersey', 'woocommerce'),
'SC' => __('South Carolina', 'woocommerce'),
'TX' => __('Texas', 'woocommerce'),
'VA' => __('Virginia', 'woocommerce'),
'WV' => __('West Virginia', 'woocommerce'),
'AA' => __('Armed Forces', 'woocommerce'),
'AE' => __('Armed Forces', 'woocommerce'),
'AP' => __('Armed Forces', 'woocommerce'),
// MANUALLY ADD STATES NOT ALLOWED HERE 'STATE_ABBREVIATION' => __('State_Name', 'woocommerce'),
);
foreach ($states['US'] as $key1 => $value) {
foreach ($states_not_allowed['US'] as $key2 => $value) {
if ($key1 === $key2) {
unset($states['US'][$key1]);
}
}
}
return $states;
}
add_filter('woocommerce_states', 'wc_sell_only_states');
如您所见,当我需要更改“不允许状态”列表时,我必须手动进入并添加状态。为了让客户端更容易实现这一点,我想制作一个管理页面,其中包含所有50个州的复选框。我创建了页面,但不确定保存数据并将其绑定回函数的最佳方法
function wc_sell_only_states($states) {
$states_not_allowed['US'] = array(
'AL' => __('Alabama', 'woocommerce'),
'AR' => __('Arkansas', 'woocommerce'),
'MD' => __('Maryland', 'woocommerce'),
'MI' => __('Michigan', 'woocommerce'),
'MO' => __('Missouri', 'woocommerce'),
'MS' => __('Mississippi', 'woocommerce'),
'NJ' => __('New Jersey', 'woocommerce'),
'SC' => __('South Carolina', 'woocommerce'),
'TX' => __('Texas', 'woocommerce'),
'VA' => __('Virginia', 'woocommerce'),
'WV' => __('West Virginia', 'woocommerce'),
'AA' => __('Armed Forces', 'woocommerce'),
'AE' => __('Armed Forces', 'woocommerce'),
'AP' => __('Armed Forces', 'woocommerce'),
// MANUALLY ADD STATES NOT ALLOWED HERE 'STATE_ABBREVIATION' => __('State_Name', 'woocommerce'),
);
foreach ($states['US'] as $key1 => $value) {
foreach ($states_not_allowed['US'] as $key2 => $value) {
if ($key1 === $key2) {
unset($states['US'][$key1]);
}
}
}
return $states;
}
add_filter('woocommerce_states', 'wc_sell_only_states');
在这里我创建了管理页面
function states_admin_page() {
global $allowed_states;
add_menu_page( __( 'States', 'states' ), __( 'States', 'states' ), 'edit_posts', 'add_data', 'my_states', 'dashicons-groups', 6 ) ;
}
add_action('admin_menu', 'states_admin_page');
这是我的回调函数。。。(不工作)
函数gemcore_states(){
如果(!空($\u POST)){
全球$wpdb;
$table=‘states’;
$data=array('selected'=>$\u POST['AA']);
$where=array('code'=>'AA');
$format='%d';
$wpdb->update($table,$data,$format,$where);
如果($成功){
echo“数据已保存”;
}
}否则{
?>
武装部队(AA):以下代码将在“美国各州设置”页面的子菜单项中添加一个包含所有美国各州复选框的表单。选中和验证的每个州都可用且允许 设置数据将作为所有设置保存在
wp_options
表中
代码如下:
// Add a submenu entry to Woocommerce menu settings
add_action('admin_menu', 'states_settings_admin_submenu');
function states_settings_admin_submenu() {
$states = __( 'Edit states', 'woocommerce' );
add_submenu_page('woocommerce', $states, $states, 'edit_shop_orders', 'edit', 'wc_states_setting_page');
}
// The content for the Woocommerce submenu entry
function wc_states_setting_page() {
$states = array();
$country_code = 'US';
include_once WC()->plugin_path() . '/i18n/states/' . $country_code . '.php';
if( isset($_POST['submit_us_states']) ) {
$new_states = [];
foreach( $states[$country_code] as $code => $label ){
$new_states[$code] = isset($_POST[$code]) && $_POST[$code] ? '1' : '';
}
update_option( 'allowed_us_states', $new_states );
}
$allowed = get_option( 'allowed_us_states' );
// Styling
echo '<style> .us-states li {width: 200px; float:left; display:block;} .us-states {max-width: 600px;} .us-states .button {float: right; margin-right: 135px;} </style>';
// The form
echo '<form method="post" class="us-states"><h1>'.__("Allowed US States settings").'</h1><ul>';
foreach( $states[$country_code] as $code => $label ){
$checked = isset($allowed[$code]) && $allowed[$code] ? ' checked="checked"' : '';
echo '<li><label><input type="checkbox" name="'.$code.'"'.$checked.'> '.$label.'</label></li>';
}
echo '</ul><br><br><input type="submit" value="submit" name="submit_us_states" class="button alt"></form>';
}
// Filtering allowed US states
add_filter('woocommerce_states', 'allowed_us_states' );
function allowed_us_states( $states ) {
if( $allowed = get_option( 'allowed_us_states' ) ){
foreach( $allowed as $code => $boolean ){
if( ! $boolean )
unset($states['US'][$code]);
}
}
return $states;
}
//在菜单设置中添加子菜单项
添加操作(“管理”菜单、“状态设置”管理子菜单);
功能状态\设置\管理\子菜单(){
$states=_uu('Edit states','woocommerce');
添加子菜单页面(“woocommerce”、$states、$states、'edit_shop_orders'、'edit'、'wc_states_setting_page');
}
//子菜单项的内容
功能wc_状态_设置_页面(){
$states=array();
$country_代码='US';
include_once WC()->plugin_path()。/i18n/states/'.$country_code..php';
如果(isset($_POST['submit_us_states'])){
$new_states=[];
foreach($states[$country\u code]为$code=>$label){
$new_states[$code]=isset($_POST[$code])&&&$_POST[$code]?“1”:“;
}
更新选项('allowed_us_states',$new_states);
}
$allowed=get_选项('allowed__states');
//造型
echo'.us states li{width:200px;float:left;display:block;}.us states{max width:600px;}.us states.button{float:right;margin right:135px;}';
//形式
回显“”。(允许的美国州设置)。;
foreach($states[$country\u code]为$code=>$label){
$checked=isset($allowed[$code])&&$allowed[$code]?“checked=”checked“:“”;
回显“- ”.$label.“
”;
}
回音“
”;
}
//过滤允许美国各州
添加过滤器('woocommerce\u states'、'allowed\u us\u states');
允许的函数状态($states){
如果($allowed=get_选项('allowed_-us_-states')){
foreach($允许为$code=>$boolean){
if(!$boolean)
未设置($states['US'][$code]);
}
}
返回$states;
}
代码放在活动子主题(或活动主题)的function.php文件中。经过测试,效果良好
我喜欢保存到wp_选项的想法,而不是我尝试创建一个新表的想法,代码非常有效。TY!@ridlemethis当然可以:)…对于Woocommerce设置,这一设置不需要自定义表,也不需要自定义表。