# Hookok: strukturált adatok, vállalkozás, termékcsoport, szállítás és profiloldal

> A strukturált adatok (JSON-LD) kimenetét módosító hookok: webhely, szervezet, helyi vállalkozás, könyv, ProfilePage, WooCommerce-szállítás, visszaküldési szabály és termékcsoport.

Ez a fejezet a strukturált adatokat (schema, JSON-LD) alakító hookokat gyűjti össze. A hookok használatának általános szabályait a [Composer és hookok használata](https://hub.hellowp.io/hu/plugins/wp-seopress-pro/fejlesztoknek-composer-es-hookok/) fejezet írja le. A kódot a gyermeksablonod `functions.php` fájljába vagy egy saját bővítménybe tedd.

| Hook | Legkisebb verzió | Mire jó |
|---|---|---|
| `seopress_schemas_website`, `seopress_schemas_website_html` | 6.1, 8.0 | A webhely (WebSite) séma adatainak és kész HTML-jének módosítása. |
| `seopress_schemas_organization_html` | 4.2 | A szervezet (Organization) séma JSON-szövegének módosítása vagy elhagyása. |
| `seopress_schemas_local_business_html` | 4.5 | A helyi vállalkozás sémájának módosítása. |
| `seopress_schemas_auto_book_json`, `seopress_schemas_auto_book_html` | 10.3 | Az automatikus könyvséma módosítása. |
| `seopress_schemas_profile_page_html` | 9.5 | A ProfilePage séma kész JSON-szövegének módosítása. |
| `seopress_pro_schema_profilepage_data` | 9.5 | A ProfilePage séma építéséhez használt adatok módosítása. |
| `plugins_loaded` | 9.7 | A felhasználói profil SEOPress-mezőinek eltávolítása. |
| `seopress_pro_wc_schema_shipping_details` | 9.5 | A termékséma szállítási tulajdonságainak módosítása. |
| `seopress_pro_wc_schema_shipping_details_enabled` | 9.5 | A WooCommerce `shippingDetails` generálásának be- és kikapcsolása. |
| `seopress_pro_merchant_return_policy` | 10.0 | A visszaküldési szabály (MerchantReturnPolicy) sémájának módosítása. |
| `seopress_pro_wc_product_group_schema`, `seopress_pro_wc_product_group_max_variants`, `seopress_pro_wc_product_group_attributes_map` | 10.1 | A változó termékek ProductGroup sémája, a változatok számkorlátja és a tulajdonságleképezés. |
| `seopress_json_schema_generator_get_jsons`, `seopress_json_schema_generator_get_jsons_encoded` | 4.5 | Az összes előállított JSON-LD séma módosítása kódolás előtt és után. |

## Webhely séma

A `seopress_schemas_website` szűrő a WebSite séma adatait tömbként adja át (`'tulajdonság' => 'érték'` párokkal), és tömböt kell visszaadnod. A `seopress_schemas_website_html` szűrő a kész HTML-t kapja szövegként.

```php
add_filter( 'seopress_schemas_website', 'sp_schemas_website' );
function sp_schemas_website( $json ) {
    // A séma tömbként érkezik: 'tulajdonság' => 'érték'.
    return $json;
}

add_filter( 'seopress_schemas_website_html', 'sp_schemas_website_html' );
function sp_schemas_website_html( $html ) {
    // Itt módosíthatod a kész HTML-t.
    return $html;
}
```

## Szervezet séma

A `seopress_schemas_organization_html` szűrő a JSON-LD szöveget kapja, nem a `<script>` elemet (ebben különbözik a webhely séma szűrőjétől). Ha üres szöveget adsz vissza, a szervezet séma egyáltalán nem íródik ki.

```php
function sp_organization_schema_html( $json ) {
    // $json a kódolt JSON-LD (nincs benne <script> címke).
    // Üres szöveggel eltávolítod a szervezet sémát.
    return $json;
}
add_filter( 'seopress_schemas_organization_html', 'sp_organization_schema_html' );
```

## Helyi vállalkozás séma

A `seopress_schemas_local_business_html` szűrő a helyi vállalkozás beállításaiból készülő, az egész webhelyre érvényes JSON-LD-t módosítja. A `<script>` elembe kerülő JSON-szöveget kapod, nem magát az elemet. Dekódold, módosítsd, majd kódold vissza.

```php
function sp_local_business_schema_html( $json ) {
    $data = json_decode( $json, true );

    if ( is_array( $data ) ) {
        $data['priceRange'] = '$$';
        $json               = wp_json_encode( $data, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE );
    }

    return $json;
}
add_filter( 'seopress_schemas_local_business_html', 'sp_local_business_schema_html' );
```

A helyi vállalkozás beállításairól a [Helyi vállalkozás](https://hub.hellowp.io/hu/plugins/wp-seopress-pro/strukturalt-adatok-helyi-vallalkozas/) fejezet szól.

## Automatikus könyvséma

Két szűrő van. A `seopress_schemas_auto_book_json` a Book sémát tömbként kapja kódolás előtt. A `seopress_schemas_auto_book_html` a teljes `<script type="application/ld+json">` elemet kapja szövegként; ha üres szöveget adsz vissza, semmi nem íródik ki.

```php
// Az automatikus Book séma (tömb, kódolás előtt).
function sp_book_schema_json( $json ) {
    $json['inLanguage'] = 'hu-HU';

    return $json;
}
add_filter( 'seopress_schemas_auto_book_json', 'sp_book_schema_json' );

// A teljes <script type="application/ld+json"> kimenet.
function sp_book_schema_html( $html ) {
    // Üres szöveggel nem íródik ki semmi.
    return $html;
}
add_filter( 'seopress_schemas_auto_book_html', 'sp_book_schema_html' );
```

## ProfilePage séma

A ProfilePage sémáról a [ProfilePage séma](https://hub.hellowp.io/hu/plugins/wp-seopress-pro/strukturalt-adatok-profilepage/) fejezet szól. Két szűrő módosítja.

### Az építéshez használt adatok

A `seopress_pro_schema_profilepage_data` szűrő a szerzői archívum ProfilePage sémájának adatait és a `WP_User` szerzőobjektumot adja át. Az adattömb kulcsai: `name`, `alternateName`, `identifier`, `description`, `image`, `url`, `sameAs`, `postCount`, `dateCreated`, `dateModified`. A Person főentitás az átadott adatokból épül újra, ezért az `url` mindig nem üres, abszolút URL maradjon.

```php
function sp_profilepage_data( $profile_data, $author ) {
    $profile_data['sameAs'][] = 'https://example.com/csapat/' . $author->user_nicename;

    return $profile_data;
}
add_filter( 'seopress_pro_schema_profilepage_data', 'sp_profilepage_data', 10, 2 );
```

### A kész JSON-LD

A `seopress_schemas_profile_page_html` szűrő a kódolt JSON-LD szöveget kapja, `<script>` címke nélkül.

```php
function sp_profile_page_schema_html( $json ) {
    // $json a kódolt JSON-LD (nincs benne <script> címke).
    return $json;
}
add_filter( 'seopress_schemas_profile_page_html', 'sp_profile_page_schema_html' );
```

### A felhasználói profilmezők eltávolítása

A SEOPress Pro a felhasználói profiloldalra közösségi profil- és ProfilePage-mezőket tesz. Ha nem akarod, hogy megjelenjenek, a `plugins_loaded` akcióra kapcsolt, 21-es prioritású függvény kiveszi a `UserProfileField` osztály visszahívásait a négy profil-hookból (`show_user_profile`, `edit_user_profile`, `personal_options_update`, `edit_user_profile_update`).

```php
add_action( 'plugins_loaded', 'seopress_remove_user_profile_fields', 21 );
function seopress_remove_user_profile_fields() {
    global $wp_filter;

    $hooks = array(
        'show_user_profile',
        'edit_user_profile',
        'personal_options_update',
        'edit_user_profile_update',
    );

    foreach ( $hooks as $hook ) {
        if ( ! isset( $wp_filter[ $hook ] ) ) {
            continue;
        }

        foreach ( $wp_filter[ $hook ]->callbacks as $priority => $callbacks ) {
            foreach ( $callbacks as $id => $callback ) {
                if ( is_array( $callback['function'] )
                    && is_object( $callback['function'][0] )
                    && $callback['function'][0] instanceof \SEOPressPro\Actions\Admin\UserProfileField
                ) {
                    $wp_filter[ $hook ]->remove_filter( $hook, $callback['function'], $priority );
                }
            }
        }
    }
}
```

## WooCommerce szállítási adatok a terméksémában

### A szállítási tulajdonságok módosítása

A `seopress_pro_wc_schema_shipping_details` szűrő az `OfferShippingDetails` tömbök listáját (szállítási zónánként és díjszabásonként egyet) és az aktuális `WC_Product` objektumot adja át.

```php
add_filter( 'seopress_pro_wc_schema_shipping_details', 'sp_wc_schema_shipping_details', 10, 2 );
function sp_wc_schema_shipping_details( $shipping_offers, $wc_product ) {
    if ( ! is_array( $shipping_offers ) ) {
        return $shipping_offers;
    }

    foreach ( $shipping_offers as $key => $offer ) {
        // Példa: szállítási idő hozzáadása minden ajánlathoz.
        $shipping_offers[ $key ]['deliveryTime'] = array(
            '@type'        => 'ShippingDeliveryTime',
            'handlingTime' => array(
                '@type'    => 'QuantitativeValue',
                'minValue' => 0,
                'maxValue' => 1,
                'unitCode' => 'DAY',
            ),
            'transitTime'  => array(
                '@type'    => 'QuantitativeValue',
                'minValue' => 2,
                'maxValue' => 5,
                'unitCode' => 'DAY',
            ),
        );
    }

    return $shipping_offers;
}
```

### A szállítási adatok generálásának ki- és bekapcsolása

A `seopress_pro_wc_schema_shipping_details_enabled` szűrő igaz/hamis értéket vár. A `__return_true` bekapcsolja, a `__return_false` kikapcsolja a WooCommerce `shippingDetails` sémagenerálást.

```php
// Szállítási adatok bekapcsolása
add_filter( 'seopress_pro_wc_schema_shipping_details_enabled', '__return_true' );

// Szállítási adatok kikapcsolása
add_filter( 'seopress_pro_wc_schema_shipping_details_enabled', '__return_false' );
```

## Visszaküldési szabály (MerchantReturnPolicy)

A `seopress_pro_merchant_return_policy` szűrő a WooCommerce visszaküldési beállításaiból épített MerchantReturnPolicy sémát adja át (`@type`, `applicableCountry`, `returnPolicyCategory` és a többi tulajdonság), valamint a `seopress_pro_option_name` opciót. A beállításról a [WooCommerce visszaküldési szabály](https://hub.hellowp.io/hu/plugins/wp-seopress-pro/strukturalt-adatok-woocommerce-visszakuldes/) fejezet szól.

```php
function sp_merchant_return_policy( $policy, $options ) {
    $policy['url'] = home_url( '/visszakuldes/' );

    return $policy;
}
add_filter( 'seopress_pro_merchant_return_policy', 'sp_merchant_return_policy', 10, 2 );
```

## ProductGroup séma változó termékeknél

A ProductGroup sémáról a [ProductGroup](https://hub.hellowp.io/hu/plugins/wp-seopress-pro/strukturalt-adatok-productgroup/) fejezet szól. Három szűrő hangolja.

| Szűrő | Mit módosít | Alapérték |
|---|---|---|
| `seopress_pro_wc_product_group_schema` | A változó termék kész ProductGroup sémája (a séma, a `WC_Product` és a séma környezete érkezik). | |
| `seopress_pro_wc_product_group_max_variants` | A `hasVariant` tulajdonságba kerülő változatok legnagyobb száma. A 0 vagy kisebb érték megszünteti a korlátot. | 50 |
| `seopress_pro_wc_product_group_attributes_map` | A változat-tulajdonságok (az `attribute_` és `pa_` előtag nélküli slug) leképezése schema.org tulajdonságra. | `color`, `colour`, `size`, `material`, `pattern` |

A séma környezete (a harmadik paraméter) `null`, ha az automatikus sémát a régi építő állítja elő.

```php
function sp_wc_product_group_schema( $json, $wc_product, $context ) {
    $json['inProductGroupWithID'] = $wc_product->get_sku();

    return $json;
}
add_filter( 'seopress_pro_wc_product_group_schema', 'sp_wc_product_group_schema', 10, 3 );

// A hasVariant legnagyobb elemszáma (alapérték 50). A 0 vagy kisebb érték megszünteti a korlátot.
add_filter( 'seopress_pro_wc_product_group_max_variants', function ( $limit, $wc_product ) {
    return 100;
}, 10, 2 );

// A változat-tulajdonságok slugjának leképezése schema.org tulajdonságra.
add_filter( 'seopress_pro_wc_product_group_attributes_map', function ( $map, $variation ) {
    $map['szin'] = 'color';

    return $map;
}, 10, 2 );
```

## Az összes előállított JSON-LD séma

A `seopress_json_schema_generator_get_jsons` szűrő az összes sémát tömbként adja át kódolás előtt (a séma kulcsa szerint indexelve). A `seopress_json_schema_generator_get_jsons_encoded` a kész JSON-LD szövegeket adja át sémánként egyet, kódolás után.

```php
function sp_json_schema_generator_get_jsons( $data ) {
    foreach ( $data as $key => $schema ) {
        if ( is_array( $schema ) && isset( $schema['@type'] ) && 'Article' === $schema['@type'] ) {
            $data[ $key ]['publisher']['name'] = get_bloginfo( 'name' );
        }
    }

    return $data;
}
add_filter( 'seopress_json_schema_generator_get_jsons', 'sp_json_schema_generator_get_jsons' );

// A kódolás utáni JSON-LD szövegek (sémánként egy).
function sp_json_schema_generator_get_jsons_encoded( $data ) {
    return $data;
}
add_filter( 'seopress_json_schema_generator_get_jsons_encoded', 'sp_json_schema_generator_get_jsons_encoded' );
```
