Wordpress 我想在商业产品中添加原产国
您好,我想在添加产品时添加原产国,然后根据原产国对产品进行排序Wordpress 我想在商业产品中添加原产国,wordpress,woocommerce,hook-woocommerce,Wordpress,Woocommerce,Hook Woocommerce,您好,我想在添加产品时添加原产国,然后根据原产国对产品进行排序 我能做到这一点吗?将这些函数添加到主题的“functions.php”中 在管理中显示并保存自定义字段 请注意,带有“原产国”的产品仅在分拣时显示 前端按自定义字段筛选 如果需要筛选而不是排序,请添加此选项 //add custom filter add_action( 'woocommerce_before_shop_loop', 'filter_loop_start' ); function filter_loop_start(
我能做到这一点吗?将这些函数添加到主题的“functions.php”中 在管理中显示并保存自定义字段 请注意,带有“原产国”的产品仅在分拣时显示 前端按自定义字段筛选 如果需要筛选而不是排序,请添加此选项
//add custom filter
add_action( 'woocommerce_before_shop_loop', 'filter_loop_start' );
function filter_loop_start( $query ){
$countries_obj = new WC_Countries();
$options = $countries_obj->__get('countries');
?>
<form name="product_filter_form" class="woocommerce-filtering" method="get">
<select name="country_origin" class="filterby" onChange="document.product_filter_form.submit();">
<option value="">Filter by Country of origin</option>
<?php foreach ($options as $key => $value) { ?>
<option value="<?php echo $key; ?>"<?php if($_GET['country_origin']==$key) echo ' selected'; ?>><?php echo $value; ?></option>
<?php } ?>
</select>
<input name="paged" value="1" type="hidden">
</form>
<?php
}
//modify query for filter
add_filter( 'pre_get_posts', 'my_modify_main_query' );
function my_modify_main_query( $query ) {
if( ! isset( $_GET['country_origin'] ) ) return $query;
$meta_query_args = array(
'meta_query' => array(
array(
'key' => '_country_origin',
'value' => sanitize_text_field( $_GET['country_origin'] ),
'compare' => 'LIKE',
)
)
);
$query->set('meta_query', $meta_query_args);
return $query;
}
//添加自定义筛选器
添加动作('woocommerce'u before'u shop'u loop','filter'u loop'u start');
函数过滤器\u循环\u开始($query){
$countries_obj=新的WC_国家();
$options=$countries\u obj->\u get('countries');
?>
按原产国筛选
答案是肯定的;-)下面的代码工作得很好,但我想在dokan中显示它的前端下面的代码工作得很好,但我想在dokan商店中为供应商显示它的前端谢谢,好的,当以管理员身份登录wordpress时,它工作得很好。我使用的是dokan,当一个虚拟机出现时,此代码不显示原产国前端ndor添加产品是否有办法在前端显示?上面的代码将在前端WooCommerce商店页面中显示排序,您需要通过管理面板更新每个产品的国家/地区。您想在前端显示什么?我想在供应商通过其商店前端添加产品时显示原产国,因为dokan没有当使用wc前端仪表板登录inI时,允许他们进入wordpress管理面板这篇文章可能会帮助你-。
// sort field
function custom_add_country_ordering_args( $sort_args ) {
$orderby_value = isset( $_GET['orderby'] ) ? wc_clean( $_GET['orderby'] ) : apply_filters( 'woocommerce_default_catalog_orderby', get_option( 'woocommerce_default_catalog_orderby' ) );
switch( $orderby_value ) {
case '_country_origin':
$sort_args['orderby'] = 'meta_value';
$sort_args['order'] = 'asc';
$sort_args['meta_key'] = '_country_origin';
break;
case '_country_origin-desc':
$sort_args['orderby'] = 'meta_value';
$sort_args['order'] = 'desc';
$sort_args['meta_key'] = '_country_origin';
break;
}
return $sort_args;
}
add_filter( 'woocommerce_get_catalog_ordering_args', 'custom_add_country_ordering_args' );
//change sort dropdown
function custom_add_country_orderby( $sortby ) {
//remove default sorting
unset($sortby["popularity"]);
unset($sortby["rating"]);
unset($sortby["date"]);
unset($sortby["price"]);
unset($sortby["price-desc"]);
$sortby['_country_origin'] = __( 'Sort by Country of origin', 'woocommerce' );
$sortby['_country_origin-desc'] = __( 'Sort by Country of origin descending', 'woocommerce' );
return $sortby;
}
add_filter( 'woocommerce_default_catalog_orderby_options', 'custom_add_country_orderby' );
add_filter( 'woocommerce_catalog_orderby', 'custom_add_country_orderby' );
//add custom filter
add_action( 'woocommerce_before_shop_loop', 'filter_loop_start' );
function filter_loop_start( $query ){
$countries_obj = new WC_Countries();
$options = $countries_obj->__get('countries');
?>
<form name="product_filter_form" class="woocommerce-filtering" method="get">
<select name="country_origin" class="filterby" onChange="document.product_filter_form.submit();">
<option value="">Filter by Country of origin</option>
<?php foreach ($options as $key => $value) { ?>
<option value="<?php echo $key; ?>"<?php if($_GET['country_origin']==$key) echo ' selected'; ?>><?php echo $value; ?></option>
<?php } ?>
</select>
<input name="paged" value="1" type="hidden">
</form>
<?php
}
//modify query for filter
add_filter( 'pre_get_posts', 'my_modify_main_query' );
function my_modify_main_query( $query ) {
if( ! isset( $_GET['country_origin'] ) ) return $query;
$meta_query_args = array(
'meta_query' => array(
array(
'key' => '_country_origin',
'value' => sanitize_text_field( $_GET['country_origin'] ),
'compare' => 'LIKE',
)
)
);
$query->set('meta_query', $meta_query_args);
return $query;
}