web-dev-qa-db-fra.com

Comment afficher le prix de vente de woocommerce ou le prix régulier s'il n'y a pas de prix de vente

J'utilise un plugin d'additifs pour les produits woocommerce où je voudrais afficher le prix d'un produit dans ma liste déroulante des addons . Actuellement, le code que j'ai est celui-ci

    <?php
$loop = 0;
$current_value = isset( $_POST['addon-' . sanitize_title( $addon['field-name'] ) ] ) ? wc_clean( $_POST[ 'addon-' . sanitize_title( $addon['field-name'] ) ] ) : '';
global $product;
?>
<p class="form-row form-row-wide addon-wrap-<?php echo sanitize_title( $addon['field-name'] ); ?>">
    <select class="addon addon-select" name="addon-<?php echo sanitize_title( $addon['field-name'] ); ?>">

        <?php if ( ! isset( $addon['required'] ) ) : ?>
            <option value=""><?php _e('None', 'woocommerce-product-addons'); ?></option>
        <?php else : ?>
            <!--<option value=""><?php _e('Select an option...', 'woocommerce-product-addons'); ?></option>-->
        <?php endif; ?>

        <?php foreach ( $addon['options'] as $i => $option ) :
            $loop ++;
            $price = apply_filters( 'woocommerce_product_addons_option_price',
                $option['price'] > 0 ? ' + ' . wc_price( get_product_addon_price_for_display( $option['price'] ) ) . '' : '',
                $option,
                $i,
                'select'
            );
            ?>
            <option data-raw-price="<?php echo esc_attr( $option['price'] ); ?>" data-price="<?php echo get_product_addon_price_for_display( $option['price'] ); ?>" value="<?php echo sanitize_title( $option['label'] ) . '-' . $loop; ?>" <?php selected( $current_value, sanitize_title( $option['label'] ) . '-' . $loop ); ?>><?php echo wptexturize( $option['label'] . ' (' ); echo balanceTags($product->get_price_html()) . $price ?>)</option>
        <?php endforeach; ?>

    </select>
</p>

J'utilise cet écho

$product->get_price_html()

ce que cela fait cependant, c'est d'afficher le "prix de vente" $ "prix" mais je veux juste afficher uniquement le prix de vente ou juste le prix du produit s'il n'y a pas de prix de vente. En regardant le code ci-dessous, comment pourrais-je accomplir cela?

7
JPWeb

Assez simple. Nous allons écrire une fonction personnalisée qui sera d'abord sûre si le produit est en vente ou non. Ensuite, le prix normal ou le prix de vente sera calculé en fonction de la condition de vente définie précédemment. Donc, la fonction sera-

/**
 * Returns product price based on sales.
 * 
 * @return string
 */
function the_dramatist_price_show() {
    global $product;
    if( $product->is_on_sale() ) {
        return $product->get_sale_price();
    }
    return $product->get_regular_price();
}

Appelez maintenant cette fonction the_dramatist_price_show() au lieu de $product->get_price_html(). Vous obtiendrez le prix basé sur est en vente ou non sans symbole monétaire.

J'espère que cela pourra aider.

21
CodeMascot

_ {Cet article a fonctionné pour moi. Vous pouvez également essayer celui-ci.} _

Si vous souhaitez obtenir le prix courant ou le prix de vente d'un produit woocommerce et que vous n'obtenez rien, vous devez connaître les éléments suivants:

Si le produit n'a pas de variations, vous pouvez obtenir le prix régulier et le prix de vente simplement comme cela:

Obtenir le prix d'un simple procut

<?php
#the product must be instantiated above like $product = new WC_Product();
echo $product->regular_price;
echo $product->sale_price;
?>

Si le produit comporte des variantes, vous n'obtiendrez rien si vous utilisez le code ci-dessus.

Vous devez obtenir les prix des produits de variation.

Obtenir le prix d'un produit avec des variations

#1 Get product variations
$product_variations = $product->get_available_variations();

#2 Get one variation id of a product
$variation_product_id = $product_variations [0]['variation_id'];

#3 Create the product object
$variation_product = new WC_Product_Variation( $variation_product_id );

#4 Use the variation product object to get the variation prices
echo $variation_product ->regular_price;
echo $variation_product ->sale_price;

Cela devrait être tout.

Prendre plaisir.

Source: http://www.w3bdeveloper.com/how-to/how-to-get- regular-price-of-a-product-in-wordpress-woocommerce/

2
Umair Mehmood

C'est ce qui fonctionne pour moi avec Wordpress 5.1 et WooCommerce 3.5.5:

                $price = get_post_meta( get_the_ID(), '_regular_price', true);
                $price_sale = get_post_meta( get_the_ID(), '_sale_price', true);
                if ($price_sale !== "") {
                    echo $price_sale;
                } else {
                    echo $price;
                }
0
Mike