Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wordpress 我想在商业产品中添加原产国_Wordpress_Woocommerce_Hook Woocommerce - Fatal编程技术网

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;
}