Отображение дополнительной стоимости товара в Woocommerce в деталях заказа

Я провел некоторое расследование и поделился своими результатами здесь, это может быть полезно для других.

Сначала мы можем проверить, включена ли опция MockSetting

public static boolean isMockSettingsON(Context context) {
    // returns true if mock location enabled, false if not enabled.
    if (Settings.Secure.getString(context.getContentResolver(),
                                Settings.Secure.ALLOW_MOCK_LOCATION).equals("0"))
        return false;
    else
        return true;
}

Second , мы можем проверить, есть ли в устройстве другие приложения, которые используют android.permission.ACCESS_MOCK_LOCATION (Приложения для спуфинга места)

public static boolean areThereMockPermissionApps(Context context) {
    int count = 0;

    PackageManager pm = context.getPackageManager();
    List<ApplicationInfo> packages =
        pm.getInstalledApplications(PackageManager.GET_META_DATA);

    for (ApplicationInfo applicationInfo : packages) {
        try {
            PackageInfo packageInfo = pm.getPackageInfo(applicationInfo.packageName,
                                                        PackageManager.GET_PERMISSIONS);

            // Get Permissions
            String[] requestedPermissions = packageInfo.requestedPermissions;

            if (requestedPermissions != null) {
                for (int i = 0; i < requestedPermissions.length; i++) {
                    if (requestedPermissions[i]
                        .equals("android.permission.ACCESS_MOCK_LOCATION")
                        && !applicationInfo.packageName.equals(context.getPackageName())) {
                        count++;
                    }
                }
            }
        } catch (NameNotFoundException e) {
            Log.e("Got exception " , e.getMessage());
        }
    }

    if (count > 0)
        return true;
    return false;
}

Если оба метода выше, первый и второй являются истинными, тогда есть хорошие шансы это местоположение может быть подделанным или поддельным.

Теперь с помощью API-интерфейса диспетчера местоположений можно избежать спуфинга.

Мы можем удалить поставщика теста, прежде чем запрашивать обновления местоположения как у поставщиков (сеть и GPS)

LocationManager lm = (LocationManager) getSystemService(LOCATION_SERVICE);

try {
    Log.d(TAG ,"Removing Test providers")
    lm.removeTestProvider(LocationManager.GPS_PROVIDER);
} catch (IllegalArgumentException error) {
    Log.d(TAG,"Got exception in removing test  provider");
}

lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 0, locationListener);

Я видел, что removeTestProvider (~) отлично работает над версией Jelly Bean и далее. Этот API оказался ненадежным до Ice Cream Sandwich.

5
задан LoicTheAztec 28 February 2019 в 21:03
поделиться

2 ответа

Вам просто нужно немного кода для отображения этой опции гарантии везде:

// Save warranty as order item custom meta data and display it everywhere
add_action('woocommerce_checkout_create_order_line_item', 'save_order_item_product_warranty', 10, 4 );
function save_order_item_product_warranty( $item, $cart_item_key, $values, $order ) {
    if( isset($values['warrenty_price']) && $values['warrenty_price'] > 0 ) {
        $key = __("Extra Warrenty", "woocommerce");
        $value = strip_tags( '+ '. wc_price( wc_get_price_to_display( $values['data'], array('price' => $values['warrenty_price']) ) ) );
        $item->update_meta_data( $key, $value );
    }
}

Код находится в файле function.php вашей активной дочерней темы (или активной темы). проверено и работает.

В полученной странице заказа (и всех других страницах заказа) :

enter image description here

[1112 ] На страницах заказов администратора:

enter image description here

В уведомлениях по электронной почте:

[ 1115] enter image description here

0
ответ дан LoicTheAztec 28 February 2019 в 21:03
поделиться
add_action( 'woocommerce_admin_order_data_after_order_details', 'warrenty_price_order_meta_general' );

function warrenty_price_order_meta_general( $order ){  ?>

        <br class="clear" />
        <h4>Gift Order <a href="#" class="edit_address">Edit</a></h4>
        <?php 
            /*
             * get all the meta data values we need
             */ 
            [110] 

Для электронной почты

add_action('woocommerce_email_order_meta', 'warrenty_price_email_order_meta', 10, 3);

function warrenty_price_email_order_meta($order_obj, $sent_to_admin, $plain_text) {


    $warrenty_price = get_post_meta($order_obj->get_id(), '_warrenty_price', true);

    if (empty($warrenty_price))
        return;

    if ($plain_text === false) {


        echo '<h2>Warranty</h2>
        <ul>
        <li><strong>Price:</strong> ' . $warrenty_price . '</li>
        </ul>';
    } else {

        echo "Warranty\n
        Price: $warrenty_price";
    }
}
warrenty_price = get_post_meta( $order->get_id(), '_warrenty_price', true ); ?> <div class="address"> <p><strong>Warranty</strong></p> <?php if( [110]

Для электронной почты

add_action('woocommerce_email_order_meta', 'warrenty_price_email_order_meta', 10, 3);

function warrenty_price_email_order_meta($order_obj, $sent_to_admin, $plain_text) {


    $warrenty_price = get_post_meta($order_obj->get_id(), '_warrenty_price', true);

    if (empty($warrenty_price))
        return;

    if ($plain_text === false) {


        echo '<h2>Warranty</h2>
        <ul>
        <li><strong>Price:</strong> ' . $warrenty_price . '</li>
        </ul>';
    } else {

        echo "Warranty\n
        Price: $warrenty_price";
    }
}
warrenty_price ) : ?> <p><strong>Price:</strong> <?php echo [110]

Для электронной почты

add_action('woocommerce_email_order_meta', 'warrenty_price_email_order_meta', 10, 3);

function warrenty_price_email_order_meta($order_obj, $sent_to_admin, $plain_text) {


    $warrenty_price = get_post_meta($order_obj->get_id(), '_warrenty_price', true);

    if (empty($warrenty_price))
        return;

    if ($plain_text === false) {


        echo '<h2>Warranty</h2>
        <ul>
        <li><strong>Price:</strong> ' . $warrenty_price . '</li>
        </ul>';
    } else {

        echo "Warranty\n
        Price: $warrenty_price";
    }
}
warrenty_price ?></p> <?php endif; ?> </div> <?php } ?>

Для электронной почты

add_action('woocommerce_email_order_meta', 'warrenty_price_email_order_meta', 10, 3);

function warrenty_price_email_order_meta($order_obj, $sent_to_admin, $plain_text) {


    $warrenty_price = get_post_meta($order_obj->get_id(), '_warrenty_price', true);

    if (empty($warrenty_price))
        return;

    if ($plain_text === false) {


        echo '<h2>Warranty</h2>
        <ul>
        <li><strong>Price:</strong> ' . $warrenty_price . '</li>
        </ul>';
    } else {

        echo "Warranty\n
        Price: $warrenty_price";
    }
}
0
ответ дан mujuonly 28 February 2019 в 21:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: