Mezők és csoportok programozott hozzáadása
A mezők adatainak módosítása megjelenítés előtt a pewc_filter_item_start_list szűrővel, és csoportok hozzáadása a pewc_filter_product_extra_groups szűrővel, négy példával.
Két szűrővel lehet futás közben, kóddal alakítani azt, ami a termékoldalon megjelenik: a pewc_filter_item_start_list egy mező adatait módosítja a kirajzolás előtt, a pewc_filter_product_extra_groups a termék csoportjait bővíti. A kódot a sablon functions.php fájljába vagy egy saját bővítménybe tedd.
A pewc_filter_item_start_list szűrő
Szekció neve “A pewc_filter_item_start_list szűrő”Minden mezőnél lefut, mielőtt a mező megjelenik. Prioritása 10, négy paramétert kap:
| Paraméter | Jelentése |
|---|---|
$item |
A mező adatai tömbként: a választható elemek, a típus és a többi beállítás |
$group |
A csoport, amelyhez a mező tartozik |
$group_id |
A csoport azonosítója |
$post_id |
A megjelenített termék azonosítója |
A $item tömb leggyakoribb kulcsai:
| Kulcs | Tartalma |
|---|---|
field_id |
A mező azonosítója; ezzel célozhatsz egy adott mezőt |
field_type |
A mező típusa, például products |
field_options |
A választható elemek tömbje; mindegyik elemnek van image (médiatár-azonosító vagy üres szöveg), value (felirat) és price (ár vagy üres szöveg) kulcsa |
child_products |
A termékek mezőnél a gyermektermékek azonosítóinak tömbje |
A szűrőnek mindig vissza kell adnia a (módosított) $item tömböt.
1. példa: országlista egyetlen elemből
Szekció neve “1. példa: országlista egyetlen elemből”Ha a választó mező első eleme a countrylist szöveg, a függvény lecseréli az összes elemet az országok listájára.
add_filter( 'pewc_filter_item_start_list', 'themeslug_filter_item_start_list', 10, 4 );function themeslug_filter_item_start_list( $item, $group, $group_id, $post_id ) { if ( isset( $item['field_options'][0]['value'] ) && 'countrylist' === $item['field_options'][0]['value'] ) { $countries = WC()->countries->get_countries(); $options = array(); foreach ( $countries as $country ) { $options[] = array( 'image' => '', 'value' => $country, 'price' => '' ); } $item['field_options'] = $options; } return $item;}2. példa: számsor a választó mezőben
Szekció neve “2. példa: számsor a választó mezőben”Az első elem értékébe kezdet||vég||lépés||kihagyások formában írhatsz mintát, a függvény ebből generálja az elemeket. Például az 1||10||1||2,5 az 1, 3, 4, 6, 7, 8, 9, 10 számokat adja (a 2 és az 5 kimarad). Minden elem értéke és ára is a szám.
add_filter( 'pewc_filter_item_start_list', 'demo_dynamic_select_field', 10, 4 );function demo_dynamic_select_field( $item, $group, $group_id, $post_id ) { if ( empty( $item['field_options'][0]['value'] ) || false === strpos( $item['field_options'][0]['value'], '||' ) ) { return $item; } $parts = explode( '||', $item['field_options'][0]['value'] ); if ( count( $parts ) < 3 ) { return $item; } $start = (float) $parts[0]; $end = (float) $parts[1]; $step = (float) $parts[2] ?: 1; $exclude = isset( $parts[3] ) ? array_map( 'floatval', explode( ',', $parts[3] ) ) : array(); $options = array(); for ( $n = $start; $n <= $end; $n += $step ) { if ( in_array( $n, $exclude, true ) ) { continue; } $options[] = array( 'image' => '', 'value' => $n, 'price' => $n ); } $item['field_options'] = $options; return $item;}3. példa: képminták a médiatárból
Szekció neve “3. példa: képminták a médiatárból”A képmintás mezőnél a field_options elemeinek image kulcsa médiatár-azonosítót vár. Ha csak képcímeid vannak, az attachment_url_to_postid() azonosítóvá alakítja őket, a wc_get_filename_from_url() pedig a fájlnévből felirat lesz. A példában szereplő mezőazonosítót (978) és a címeket cseréld a sajátjaidra.
add_filter( 'pewc_filter_item_start_list', 'demo_filter_item_start_list', 10, 4 );function demo_filter_item_start_list( $item, $group, $group_id, $post_id ) { if ( 978 !== (int) $item['field_id'] ) { return $item; } $urls = array( 'https://pelda.hu/wp-content/uploads/minta-1.jpg', 'https://pelda.hu/wp-content/uploads/minta-2.jpg', ); $options = array(); foreach ( $urls as $url ) { $options[] = array( 'image' => attachment_url_to_postid( $url ), 'value' => wc_get_filename_from_url( $url ), 'price' => '', ); } $item['field_options'] = $options; return $item;}4. példa: gyermektermékek cikkszám alapján, ACF-mezőből
Szekció neve “4. példa: gyermektermékek cikkszám alapján, ACF-mezőből”A Termékek mező child_products tömbje termékazonosítókat vár. Ha a termék egyik ACF-mezőjében vesszővel elválasztott cikkszámok vannak (a példában a mező neve child_product_skus), a wc_get_product_id_by_sku() azonosítóvá alakítja őket.
add_filter( 'pewc_filter_item_start_list', 'prefix_populate_products_through_ACF', 10, 4 );function prefix_populate_products_through_ACF( $item, $group, $group_id, $post_id ) { if ( 'products' !== $item['field_type'] ) { return $item; } $skus = get_field( 'child_product_skus', $post_id ); if ( ! $skus ) { return $item; } $ids = array(); foreach ( explode( ',', $skus ) as $sku ) { $id = wc_get_product_id_by_sku( trim( $sku ) ); if ( $id ) { $ids[] = $id; } } $item['child_products'] = $ids; return $item;}A pewc_filter_product_extra_groups szűrő
Szekció neve “A pewc_filter_product_extra_groups szűrő”Két paramétert kap ($groups, $product_id), prioritása 10. A csoportok a csoportazonosító szerint vannak kulcsolva, és mindegyiknek van egy items kulcsa, a mezőkkel. A pewc_get_group_fields( $group_id ) függvény egy csoport mezőit adja vissza.
Példa: globális csoport hozzáadása az ACF-mezős termékekhez
Szekció neve “Példa: globális csoport hozzáadása az ACF-mezős termékekhez”A következő kód a 72-es azonosítójú (példa) globális csoportot hozzáadja azokhoz a termékekhez, amelyeken ki van töltve a child_product_skus ACF-mező. A csoportazonosítót cseréld a sajátodra.
add_filter( 'pewc_filter_product_extra_groups', 'prefix_filter_groups_by_ACF', 10, 2 );function prefix_filter_groups_by_ACF( $groups, $product_id ) { if ( get_field( 'child_product_skus', $product_id ) ) { $groups[72] = array( 'items' => pewc_get_group_fields( 72 ) ); } return $groups;}A mezők és csoportok létrehozására, módosítására külső rendszerből a REST API is használható, a többi hook listáját pedig a Hookok és szűrők fejezet tartalmazza.
Készült: