Tovább a tartalomhoz

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.

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;
}

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:

Tiszteletben tartjuk a magánszférádat

Sütiket használunk a böngészési élmény javítására és a forgalom elemzésére. Az analitika csak akkor indul, ha engeded. Adatvédelmi irányelvek, Sütitájékoztató.

Sütibeállítások