Aggiungi sottotitoli al titolo del prodotto Woocommerce


8

Sto usando WooCommerce su un sito creato con Pagelines Framework. Devo avere un campo sottotitoli / personalizzabile visualizzato sotto il nome del prodotto ovunque appaia nel sito. Allo stato attuale, WooCommerce non offre questa opzione.

Ho provato a usare campi personalizzati ma WooCommerce usa anche questi e ha prodotto un sacco di cose che non voglio insieme al mio sottotitolo. Se dovessi nominare 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 se è così, come posso fare il mio nuovo output sul campo subito dopo il titolo del prodotto sul front-end?

Ho trovato gli hook di cui ho bisogno in questo file php (penso, non conosco php, motivo per cui te lo 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 posso aggiungere nel campo personalizzato a quell'elenco?

O c'è un modo completamente diverso per ottenere ciò di cui ho bisogno?

Gratitudine immortale a chiunque possa aiutare.

Risposte:


5

Per rispondere alla tua prima domanda, ottenere il tuo post meta»bookauthor« in questo modo farà eco / visualizzerà proprio questo. Se stai definendo la variabile $idnel codice giusto, oppure puoi farlo come mostrato di seguito.

Il codice dovrebbe rispondere alla tua seconda domanda, come inserire la seconda riga del titolo nella pagina del prodotto tramite il gancio 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 un po 'più di conforto con il tuo meta post personalizzato, puoi fare ciò che @ pl4g4 e @brasofilo hanno suggerito e aggiungere un metabox alla schermata di modifica del prodotto, ma ovviamente non è necessario, sembra che tu sappia come farlo con il wordpress standard personalizzato campi metabox .


Puoi aggiungere la tua meta box in questo modo, il codice si basa sul primo esempio nella pagina del codice wordpress add_meta_box .

/**
 * Adds a box to the main column on the Post and Page edit screens.
 */
function wpse116660_wc_2nd_title_mb() {

    $screen = array( 'product' );

        add_meta_box(
            'wc_2nd_title_mb',
            __( '2nd title', 'your_textdomain' ),
            'wc_2nd_title_inner_mb',
            $screen,
            'advanced',
            'high'
        );
}
add_action( 'add_meta_boxes', 'wpse116660_wc_2nd_title_mb', 0 );

/**
 * Prints the box content.
 * 
 * @param WP_Post $post The object for the current post/page.
 */
function wpse116660_wc_2nd_title_inner_mb( $post ) {

  // Add an nonce field so we can check for it later.
  wp_nonce_field( 'wc_2nd_title_inner_mb', 'wc_2nd_title_inner_mb_nonce' );

  /*
   * Use get_post_meta() to retrieve an existing value
   * from the database and use the value for the form.
   */
  $value = get_post_meta( $post->ID, 'bookauthor', true );

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

}

/**
 * When the post is saved, saves our custom data.
 *
 * @param int $post_id The ID of the post being saved.
 */
function wpse116660_wc_2nd_title_save_postdata( $post_id ) {

  /*
   * We need to verify this came from the our screen and with proper authorization,
   * because save_post can be triggered at other times.
   */

  // Check if our nonce is set.
  if ( ! isset( $_POST['wc_2nd_title_inner_mb_nonce'] ) )
    return $post_id;

  $nonce = $_POST['wc_2nd_title_inner_mb_nonce'];

  // Verify that the nonce is valid.
  if ( ! wp_verify_nonce( $nonce, 'wc_2nd_title_inner_mb' ) )
      return $post_id;

  // If this is an autosave, our form has not been submitted, so we don't want to do anything.
  if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) 
      return $post_id;

  // Check the user's permissions.
  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, its safe for us to save the data now. */

  // Sanitize user input.
  $mydata = sanitize_text_field( $_POST['bookauthor_field'] );

  // Update the meta field in the database.
  update_post_meta( $post_id, 'bookauthor', $mydata );
}
add_action( 'save_post', 'wpse116660_wc_2nd_title_save_postdata' );

1
+1. Il add_actioncon una priorità di 6 ciò che metterà il sottotitolo subito dopo il titolo normale (che ha una priorità di 5). Nel caso in cui l'OP non volesse aggiungere il proprio metabox, ho già scritto un plugin per i sottotitoli che salva i dati.
Helgatheviking

3

Puoi aggiungere un metabox extra al post del prodotto. Questa meta box dovrebbe avere e inserire un modulo in modo da poter inserire il sottotitolo, quando hai aggiunto il metabox salva il valore in post_meta quando il prodotto viene salvato, quindi nella pagina del singolo prodotto dal modello di woocommerce usa il codice

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

capirlo.

puoi trovare informazioni su metaboxess qui e anche qui


Oppure usa i campi personalizzati avanzati o cerca nei nostri archivi .
brasofilo,

+1, ma per favore non pubblicare collegamenti a fonti esterne. Se è necessario, evoca anche ciò che è scritto (codice) nella destinazione.
Kaiser
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.