Aggiungere l'unità di misura dopo il prezzo in WooCommerce. Esempio $ 24 /m2 e $24 /m

19 giu 2013, 12:43:48
Visualizzazioni: 19.5K
Voti: 4

Ciao ragazzi,

Sto cercando di implementare il prezzo per unità nel mio negozio WooCommerce. Alcuni prodotti che vendo sono piastrelle per pavimenti, e come tali vengono venduti al metro quadrato.

Ho aggiunto il seguente codice CSS per visualizzare /m2 dopo ogni prezzo:

.amount:after{
    content: "/m2";
    text-size: 13px;
}

Questo aggiunge /m2 dopo ogni prezzo.

Tuttavia, alcuni prodotti che vendo non sono piastrelle. Ad esempio, le listelle decorative vengono vendute al metro lineare, mentre i blocchi per colonne vengono venduti a pezzo. Come posso aggiungere correttamente queste unità di misura?

WooCommerce riconosce gli SKU nel CSS? E se sì, come posso implementarlo?

0
Tutte le risposte alla domanda 2
1

Innanzitutto, fare questo con CSS secondo me non è assolutamente la strada giusta.

In secondo luogo, pagare 129$ per un'estensione solo per avere questa piccola funzionalità sarebbe ridicolo - nulla contro il plugin in sé.

In terzo luogo, la soluzione di base descritta di seguito si basa sull'esempio della pagina codex di add_meta_box. Ci sono varie altre soluzioni per ottenere questo risultato, basta cercare un po', questo serve per farti iniziare.

Codice:

/**
 * Aggiunge un box alla colonna principale nelle schermate di modifica di Articoli, Pagine e Prodotti.
 */
function wpse103469_wc_price_per_unit_mb() {

    $screens = array( 'post', 'page', 'product' );

    foreach ( $screens as $screen ) {

        add_meta_box(
            'wc_price_per_unit_mb',
            __( 'Prezzo per Unità', 'myplugin_textdomain' ),
            'wpse103469_wc_price_per_unit_inner_mb',
            $screen,
            'advanced',
            'high'
        );
    }
}
add_action( 'add_meta_boxes', 'wpse103469_wc_price_per_unit_mb' );

/**
 * Stampa il contenuto del box.
 * 
 * @param WP_Post $post L'oggetto per l'articolo/pagina corrente.
 */
function wpse103469_wc_price_per_unit_inner_mb( $post ) {

  // Aggiunge un campo nonce per verificarlo in seguito.
  wp_nonce_field( 'wpse103469_wc_price_per_unit_inner_mb', 'wpse103469_wc_price_per_unit_inner_mb_nonce' );

  /*
   * Utilizza get_post_meta() per recuperare un valore esistente
   * dal database e usarlo nel form.
   */
  $value = get_post_meta( $post->ID, 'wc_price_per_unit_key', true );

  echo '<label for="wc_price_per_unit_field">';
       _e( "Prezzo per Unità", 'myplugin_textdomain' );
  echo '</label> ';
  echo '<input type="text" id="wc_price_per_unit_field" name="wc_price_per_unit_field" value="' . esc_attr( $value ) . '" size="25" />';

}

/**
 * Quando l'articolo viene salvato, salva i nostri dati personalizzati.
 *
 * @param int $post_id L'ID dell'articolo che viene salvato.
 */
function wpse103469_wc_price_per_unit_save_postdata( $post_id ) {

  /*
   * Dobbiamo verificare che questo provenga dalla nostra schermata e con la giusta autorizzazione,
   * perché save_post può essere attivato in altri momenti.
   */

  // Controlla se il nostro nonce è impostato.
  if ( ! isset( $_POST['wpse103469_wc_price_per_unit_inner_mb_nonce'] ) )
    return $post_id;

  $nonce = $_POST['wpse103469_wc_price_per_unit_inner_mb_nonce'];

  // Verifica che il nonce sia valido.
  if ( ! wp_verify_nonce( $nonce, 'wpse103469_wc_price_per_unit_inner_mb' ) )
      return $post_id;

  // Se è un salvataggio automatico, il nostro form non è stato inviato, quindi non vogliamo fare nulla.
  if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) 
      return $post_id;

  // Controlla i permessi dell'utente.
  if ( 'page' == $_POST['post_type'] ) {

    if ( ! current_user_can( 'edit_page', $post_id ) )
        return $post_id;

  } else {

    if ( ! current_user_can( 'edit_post', $post_id ) )
        return $post_id;
  }

  /* OK, ora è sicuro salvare i dati. */

  // Sanitizza l'input dell'utente.
  $price_per_unit = sanitize_text_field( $_POST['wc_price_per_unit_field'] );

  // Aggiorna il campo meta nel database.
  update_post_meta( $post_id, 'wc_price_per_unit_key', $price_per_unit );
}
add_action( 'save_post', 'wpse103469_wc_price_per_unit_save_postdata' );


Il campo meta »Prezzo per Unità« può essere visualizzato così:

echo get_post_meta(get_the_ID(), 'wc_price_per_unit_key', true); 

nel relativo file template.

Per aggiungere l'informazione dal campo meta »Prezzo per Unità« direttamente all'output del prezzo puoi fare qualcosa del genere:

add_filter('woocommerce_get_price_html','wpse103469_add_price_per_unit_meta_to_price');
function wpse103469_add_price_per_unit_meta_to_price( $price ) {
    $price .= ' ' . get_post_meta(get_the_ID(), 'wc_price_per_unit_key', true);
    return $price;
}
1 dic 2013 19:10:26
Commenti

Sarò in grado di ottenere l'unità quando chiamo il metodo WooCommerce per ottenere il prezzo?

melvin melvin
24 ago 2018 08:01:22
2

Prima risponderò alla tua domanda nel modo in cui stavi procedendo, poi ti darò la risposta che secondo me sarebbe più appropriata.

CSS

Puoi ottenere questo risultato con il CSS in alcuni modi diversi:

1) Puoi puntare qualsiasi pagina prodotto:

.single-product .amount:after{
    content: "/m²";
    text-size: 13px;
}

2) Puoi puntare un prodotto specifico usando il suo ID prodotto:

.postid-XXXX .amount:after{
    content: "/m²";
    text-size: 13px;
}

3) Puoi puntare una categoria specifica usando il suo ID categoria:

.term-XXXX .amount:after{
    content: "/m²";
    text-size: 13px;
}

Measurement Price Calculator

Potresti naturalmente usare l'estensione Measurement Price Calculator per WooCommerce. Fa molte delle cose che desideri e aggiunge elementi UI fantastici. Probabilmente è la soluzione che consiglierei.

20 giu 2013 01:33:45
Commenti

Puoi chiarire la tua affiliazione all'estensione che stai suggerendo?

Nicolai Grossherr Nicolai Grossherr
1 dic 2013 19:11:34

@ialocin Lavoro per WooThemes ma la mia risposta è personale.

BFTrick BFTrick
2 dic 2013 02:12:13