Aggiungere un sottotitolo al titolo del prodotto WooCommerce

3 ott 2013, 20:07:16
Visualizzazioni: 28.6K
Voti: 8

Sto utilizzando WooCommerce su un sito costruito con Pagelines Framework. Ho bisogno di avere un sottotitolo/campo personalizzabile che appaia sotto il nome del prodotto ovunque esso compaia nel sito. Al momento, WooCommerce non offre questa opzione.

Ho provato a utilizzare i campi personalizzati ma WooCommerce li usa già e mostra una serie di elementi che non voglio insieme al mio sottotitolo. Se dovessi chiamare il mio campo personalizzato "bookauthor", questo codice funzionerebbe per visualizzare solo il campo personalizzato che desidero?

<?php echo get_post_meta($id, "bookauthor", true); ?>

E in tal caso, come faccio a far apparire il mio nuovo campo subito dopo il titolo del prodotto nel frontend?

Ho trovato gli hook necessari in questo file php (credo, non conosco php, ed è per questo che sto chiedendo):

<?php 
/*
  * @hooked woocommerce_template_single_title - 5
  * @hooked woocommerce_template_single_price - 10
  * @hooked woocommerce_template_single_excerpt - 20
  * @hooked woocommerce_template_single_add_to_cart - 30
  * @hooked woocommerce_template_single_meta - 40
  * @hooked woocommerce_template_single_sharing - 50
*/
?>

So come filtrare ma come faccio ad aggiungere il campo personalizzato a quell'elenco?

O esiste un modo completamente diverso per ottenere ciò di cui ho bisogno?

Gratitudine eterna a chiunque possa aiutare.

0
Tutte le risposte alla domanda 2
1

Per rispondere alla tua prima domanda, ottenere il tuo post meta »bookauthor« in questo modo lo visualizzerà semplicemente. Se stai definendo correttamente la variabile $id nel tuo codice - oppure puoi farlo come mostrato di seguito.

Il codice dovrebbe rispondere alla tua seconda domanda, su come inserire la seconda riga del titolo nella pagina del prodotto tramite l'hook woocommerce_single_product_summary. Aggiungi le tue informazioni extra in questo modo:

    function wpse116660_wc_add_2nd_title() {
        ?>
        <div class="2nd-tile">
            <?php echo get_post_meta(get_the_ID(), "bookauthor", true); ?>
        </div>
        <?php
    }
    add_action( 'woocommerce_single_product_summary', 'wpse116660_wc_add_2nd_title', 6 );

Per avere maggiore comodità con i tuoi post meta personalizzati, puoi fare come suggerito da @pl4g4 e @brasofilo e aggiungere un metabox alla schermata di modifica del prodotto, ma non è necessario ovviamente, sembra che tu sappia già come farlo con il metabox dei campi personalizzati standard di WordPress.


Puoi aggiungere il tuo metabox in questo modo, il codice si basa sul primo esempio della pagina del codex di WordPress per add_meta_box.

/**
 * Aggiunge un box alla colonna principale nelle schermate di modifica di Post e Pagine.
 */
function wpse116660_wc_2nd_title_mb() {

    $screen = array( 'product' );

        add_meta_box(
            'wc_2nd_title_mb',
            __( 'Secondo titolo', 'your_textdomain' ),
            'wc_2nd_title_inner_mb',
            $screen,
            'advanced',
            'high'
        );
}
add_action( 'add_meta_boxes', 'wpse116660_wc_2nd_title_mb', 0 );

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

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

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

  echo '<label for="bookauthor_field">';
       _e( "Autore del libro", 'your_textdomain' );
  echo '</label> ';
  echo '<input type="text" id="bookauthor_field" name="bookauthor_field" value="' . esc_attr( $value ) . '" size="50" />';

}

/**
 * Quando il post viene salvato, salva i nostri dati personalizzati.
 *
 * @param int $post_id L'ID del post che viene salvato.
 */
function wpse116660_wc_2nd_title_save_postdata( $post_id ) {

  /*
   * Dobbiamo verificare che questo arrivi 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['wc_2nd_title_inner_mb_nonce'] ) )
    return $post_id;

  $nonce = $_POST['wc_2nd_title_inner_mb_nonce'];

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

  // Se è un autosalvataggio, 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.
  $mydata = sanitize_text_field( $_POST['bookauthor_field'] );

  // Aggiorna il campo meta nel database.
  update_post_meta( $post_id, 'bookauthor', $mydata );
}
add_action( 'save_post', 'wpse116660_wc_2nd_title_save_postdata' );
4 ott 2013 00:32:26
Commenti

+1. Il add_action con una priorità di 6 è ciò che posizionerà il sottotitolo subito dopo il titolo regolare (che ha una priorità di 5). Nel caso in cui l'OP non voglia aggiungere il proprio metabox, ho già sviluppato un plugin per sottotitoli che salva i dati.

helgatheviking helgatheviking
4 ott 2013 13:48:10
2

Puoi aggiungere un metabox aggiuntivo al post del prodotto. Questo metabox dovrebbe avere un modulo di input per inserire il sottotitolo. Dopo aver aggiunto il metabox, salva il valore nei post_meta quando il prodotto viene salvato. Poi, nella pagina del singolo prodotto del template di WooCommerce, usa il codice:

<?php echo get_post_meta($id, "bookauthor", true); ?>

per recuperarlo.

Puoi trovare informazioni sui metabox Qui e anche Qui

3 ott 2013 23:20:55
Commenti

Oppure usa Advanced Custom Fields o cerca nei nostri archivi.

brasofilo brasofilo
3 ott 2013 23:38:19

+1, ma per favore non postare link a fonti esterne. Se devi farlo, per favore riassumi anche ciò che è scritto (codice) nel target.

kaiser kaiser
4 ott 2013 01:16:48