Metakenttien yhdistäminen Block Bindings API:n avulla

Laptop in the table, in the screen there is word email.

Aikaisemmassa artikkelissa kävimme läpi, miten rakennetaan ja lisätään kenttiä metatietoja varten natiivisti WordPressin lohkoeditorissa. Esimerkissä kävimme läpi, miten metakentille rakennetaan natiivi UI. Sisältötyyppimme oli ”Toimistot”, jolle lisäsimme kolme kenttää erilaisia metatietoa varten:

  • Sähköposti
  • Puhelinnumero
  • Verkkosivuston URL

Tällä saatiin custom-metatiedot näkymään lohkoeditorin puolella. Mutta miten näytämme metakenttien tiedot sivuston käyttäjille, kun käytämme lohkoteemaa? Voisimme rakentaa kustomoidun lohkon, mutta se kuulostaa turhan työläältä.

Metakentillä tallennetaan lisätietoa postauksiin, sivuille tai muuntyyppiseen sisältöön WordPressissä.

WordPress Block Bindings API

Ratkaisun tarjoaa WordPressin Block Bindings API. Se on rajapinta, jonka avulla metakenttien dataa voi lukea ja liittää Coren lohkoihin – tai mitä tahansa dataa, jota PHP:ssa määritellään.

Huomaa, että tällä hetkellä (WordPress-versio 6.8) vain seuraavat Core-lohkot tukevat Block Bindings APIa:

  • Kuva-lohko
    • tukee url-, alt- ja title-attribuutteja
  • Kappale-lohko
    • tukee content-attribuuttia
  • Otsikko-lohko
    • tukee content-attribuuttia
  • Painike-lohko
    • tukee url-, text-, linkTarget- ja rel-attribuutteja

Käytetään Kappale-lohkoa metakenttien tietojen yhdistämiseen

Käydään ensin läpi, miten metakenttien tiedot saadaan dynaamisesti Kappale-lohkoon. Voimme esimerkiksi luoda single-office.html-mallin, jossa luomme pohjan datan käyttöön seuraavien vaiheiden mukaisesti.

Kappaleen markup näyttää oletuksena tältä:

<!-- wp:paragraph -->
<p></p>
<!-- /wp:paragraph -->

Seuraavaksi lisätään manuaalisesti markuppiin Block Bindings API -tiedot, johon haluamme liittää toimiston sähköpostiosoitteen:

<!-- wp:paragraph {
  "metadata":{
    "bindings":{
      "content":{
        "source":"mt-features/office-email",
        "args":{
          "key":"office_email"
        }
      }
    }
  }
} -->
<p></p>
<!-- /wp:paragraph -->

Huomaa erityisesti lähde: "source":"mt-features/office-email".

Käytetään tätä uniikkia ID:tä seuraavassa vaiheessa.

Rekisteröidään kustomoitu lähde register_block_bindings_source -funktiolla

Esimerkkikappaleessamme lähteenä käytetään nimeä mt-features/office-email. PHP:ssä voimme rekisteröidä tämän mukautetun lähteen register_block_bindings_source-funktiolla.

add_action( 'init', 'prefix_register_block_bindings' );

function prefix_register_block_bindings() {
  register_block_bindings_source(
    'mt-features/office-email',
    array(
      'label' => __( 'Office email', 'textdomain' ),
      'get_value_callback' => 'prefix_bindings_callback',
    )
  );
}

Huomaa tässä sama lähteen nimi: mt-features/office-email.

Tämän jälkeen voimme hakea PHP:lla oikean metatiedon callback-funktiolla, prefix_bindings_callback.

Metatiedon logiikka callback-funktiossa

Seuraavaksi tehdään callback-funktio, joka palauttaa toimiston sähköpostiosoitteen:

function prefix_bindings_callback( $source_args ) {
  // Get the data from the post meta.
  $office_email = get_post_meta( get_the_ID(), 'office_email', true ) ?? false;

  // Link to the email address.
  if ( $office_email ) {
    $office_email = sprintf(
      '<a href="mailto:%s">%s</a>',
      esc_html( $office_email ),
      esc_html( $office_email )
    );
  }

  // Return the data.
  return $office_email;
}

Huom! Jos toimiston sähköpostiosoitetta ei ole lisätty, merkinnässä on edelleen tyhjä kappale (<p></p>). Tämä on Block Bindings API:n haittapuoli, mutta joissakin tapauksissa riittävät hyvät oletusarvot, kuten 10up-artikkelissa mainitaan.

Koodiesimerkki löytyy Githubista.

Laptop in the table, in the screen there is word email.

Jatkolukemista