Adaugă subtitlu la titlul produsului WooCommerce
Folosesc WooCommerce pe un site construit cu Pagelines Framework. Am nevoie să adaug un subtitlu/câmp personalizabil sub numele produsului oriunde apare acesta pe site. În mod implicit, WooCommerce nu oferă această opțiune.
Am încercat să folosesc câmpuri personalizate, dar WooCommerce le folosește și el și afișează o mulțime de lucruri pe care nu le doresc împreună cu subtitlul meu. Dacă aș numi câmpul meu personalizat "bookauthor", ar funcționa acest cod pentru a afișa doar câmpul personalizat dorit?
<?php echo get_post_meta($id, "bookauthor", true); ?>
Și dacă da, cum fac ca noul meu câmp să fie afișat imediat după titlul produsului în frontend?
Am găsit hook-urile de care am nevoie în acest fișier PHP (cred eu, nu știu PHP, de aceea vă întreb):
<?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
*/
?>
Știu cum să filtrez, dar cum adaug câmpul personalizat în această listă?
Sau există o modalitate complet diferită de a realiza ceea ce am nevoie?
Recunoștință eternă oricui mă poate ajuta.

Pentru a răspunde la prima întrebare, obținerea meta-informațiilor postului post meta
»bookauthor« în acest fel va afișa doar acea valoare. Dacă definiți variabila $id
corect în codul dumneavoastră - sau o puteți face așa cum este arătat mai jos.
Codul ar trebui să răspundă la a doua întrebare, cum să adăugați a doua linie de titlu la pagina de produs prin hook-ul woocommerce_single_product_summary
. Adăugați informațiile suplimentare astfel:
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 );
Pentru a avea mai multă flexibilitate cu meta-informațiile personalizate ale postului, puteți face ce au sugerat @pl4g4 și @brasofilo și adăugați o casetă meta la ecranul de editare al produsului, dar nu este necesar desigur, se pare că știți cum să o faceți cu standardul WordPress caseta meta pentru câmpuri personalizate.
Puteți adăuga caseta meta astfel, codul este bazat pe primul exemplu de pe pagina add_meta_box din codex-ul WordPress.
/**
* Adaugă o casetă în coloana principală pe ecranele de editare Post și Pagină.
*/
function wpse116660_wc_2nd_title_mb() {
$screen = array( 'product' );
add_meta_box(
'wc_2nd_title_mb',
__( 'Al doilea titlu', 'your_textdomain' ),
'wc_2nd_title_inner_mb',
$screen,
'advanced',
'high'
);
}
add_action( 'add_meta_boxes', 'wpse116660_wc_2nd_title_mb', 0 );
/**
* Afișează conținutul casetei.
*
* @param WP_Post $post Obiectul pentru postul/pagina curentă.
*/
function wpse116660_wc_2nd_title_inner_mb( $post ) {
// Adaugă un câmp nonce pentru a putea verifica mai târziu.
wp_nonce_field( 'wc_2nd_title_inner_mb', 'wc_2nd_title_inner_mb_nonce' );
/*
* Folosește get_post_meta() pentru a prelua o valoare existentă
* din baza de date și a o folosi în formular.
*/
$value = get_post_meta( $post->ID, 'bookauthor', true );
echo '<label for="bookauthor_field">';
_e( "Autorul cărții", 'your_textdomain' );
echo '</label> ';
echo '<input type="text" id="bookauthor_field" name="bookauthor_field" value="' . esc_attr( $value ) . '" size="50" />';
}
/**
* Când postul este salvat, salvează datele noastre personalizate.
*
* @param int $post_id ID-ul postului care este salvat.
*/
function wpse116660_wc_2nd_title_save_postdata( $post_id ) {
/*
* Trebuie să verificăm dacă aceasta provine din ecranul nostru și cu autorizația corespunzătoare,
* deoarece save_post poate fi declanșat în alte momente.
*/
// Verifică dacă nonce-ul nostru este setat.
if ( ! isset( $_POST['wc_2nd_title_inner_mb_nonce'] ) )
return $post_id;
$nonce = $_POST['wc_2nd_title_inner_mb_nonce'];
// Verifică dacă nonce-ul este valid.
if ( ! wp_verify_nonce( $nonce, 'wc_2nd_title_inner_mb' ) )
return $post_id;
// Dacă aceasta este o salvare automată, formularul nostru nu a fost trimis, așa că nu vrem să facem nimic.
if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE )
return $post_id;
// Verifică permisiunile utilizatorului.
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, este sigur să salvăm datele acum. */
// Curăță inputul utilizatorului.
$mydata = sanitize_text_field( $_POST['bookauthor_field'] );
// Actualizează câmpul meta în baza de date.
update_post_meta( $post_id, 'bookauthor', $mydata );
}
add_action( 'save_post', 'wpse116660_wc_2nd_title_save_postdata' );

+1. Folosirea add_action
cu o prioritate de 6 va plasa subtitlul chiar după titlul obișnuit (care are prioritatea 5). În cazul în care OP nu dorește să adauge propriul metabox, am scris deja un plugin pentru subtitluri care salvează datele.

Poți adăuga un metabox suplimentar la postarea de produs. Acest metabox ar trebui să conțină un formular de introducere a datelor, astfel încât să poți introduce subtitlul. După ce ai adăugat metabox-ul, salvează valoarea în post_meta atunci când produsul este salvat, apoi în pagina de produs singular din șablonul WooCommerce folosește codul:
<?php echo get_post_meta($id, "bookauthor", true); ?>
pentru a-l obține.
Poți găsi informații despre metabox-uri Aici și de asemenea Aici.

Sau folosește Advanced Custom Fields sau caută în arhivele noastre.
