Tovább a tartalomhoz

Egyedi ACF-mezőtípusok támogatása

Hogyan taníthatod meg az importnak a saját fejlesztésű ACF-mezőtípusokat PHP-kóddal.

Az ACF lehetővé teszi saját mezőtípus létrehozását, ha olyan adatot kell tárolni és betölteni, amelyet a beépített típusok nem tudnak kezelni. Ez a fejezet fejlesztőknek szól: megmutatja, hogyan támogathatja az import az ilyen egyedi mezőtípust.

A példában egy soflyy_field nevű mezőtípust támogatunk. A kódrészleteket a gyermektéma functions.php fájljába, vagy egy kódrészlet-bővítménybe (például Code Snippets) teheted. A példában az osztályfájl és a nézetfájl egy kis saját bővítményben van, ennek gyökérmappáját a MY_CUSTOM_PLUGIN_ROOT_DIR állandó jelöli.

Három dologra van szükség: egy osztályra, ami az importálást végzi, egy szűrőre, ami betölti az osztályt, és egy nézetfájlra, ami a beviteli mezőt jeleníti meg a hozzárendelő oldalon.

Az osztálynak a pmai_acf_add_on\fields\Field osztályból kell származnia. Kiindulásnak használhatod az ingyenes ACF-importáló FieldText osztályát (csv-xml-import-for-acf/src/fields/acf/FieldText.php). Az osztályban legalább ezek legyenek:

  • a $type tulajdonság (a mezőtípus azonosítója),
  • a parse metódus,
  • az import metódus.
namespace wpai_acf_add_on_pro\fields\acf;
use pmai_acf_add_on\ACFService;
use pmai_acf_add_on\fields\Field;
class FieldSoflyyField extends Field {
// A mezőtípus azonosítója
public $type = 'soflyy_field';
// A mező adatainak feldolgozása
public function parse($xpath, $parsingData, $args = array()) {
parent::parse($xpath, $parsingData, $args);
$values = $this->getByXPath($xpath);
$this->setOption('values', $values);
}
// A mentés: az importáláskor ez a metódus fut
public function import($importData, $args = array()) {
$isUpdated = parent::import($importData, $args);
if (!$isUpdated){
return FALSE;
}
ACFService::update_post_meta($this, $this->getPostID(), $this->getFieldName(), $this->getFieldValue());
}
}

Importáláskor az osztály import metódusa menti el az egyedi mezőtípus értékét.

A wp_all_import_acf_field_class szűrővel töltsd be az osztályt. A szűrő a mezőadat type értéke alapján dönt: a saját típusodnál a saját osztály nevét adja vissza, minden másnál az eredeti értéket.

function my_soflyy_field( $class , $fieldData, $post, $fieldName, $fieldParent ) {
if ($fieldData['type'] == 'soflyy_field'){
// Betöltés, ha az osztály még nincs definiálva
if (!class_exists('\wpai_acf_add_on_pro\fields\acf\FieldSoflyyField')) {
require_once MY_CUSTOM_PLUGIN_ROOT_DIR . '/classes/FieldSoflyyField.php';
}
return '\wpai_acf_add_on_pro\fields\acf\FieldSoflyyField';
} else {
return $class;
}
}
add_filter( 'wp_all_import_acf_field_class', 'my_soflyy_field', 10, 5 );

A visszaadott osztálynak már definiálva kell lennie, mert a bővítmény csak azt ellenőrzi, hogy létezik-e, és példányosítja. A fájlt magától nem tölti be.

3. lépés: a nézet megadása a hozzárendelő oldalon

Szekció neve “3. lépés: a nézet megadása a hozzárendelő oldalon”

A nézetfájl azt a beviteli mezőt tartalmazza, amely a Húzás és ejtés oldalon megjelenik, amikor ezt a mezőtípust rendeled hozzá. A példában a SoflyyField.php nézetfájl:

<input
type="text"
placeholder=""
value="<?php echo esc_attr( $current_field );?>"
name="fields<?php echo $field_name;?>[<?php echo $field['key'];?>]"
class="text widefat rad4"/>

A fájl útvonalát a wp_all_import_acf_field_view_path_<mezőtípus> szűrővel add meg. A szűrő neve dinamikus: a példában a soflyy_field helyére a saját mezőtípusod azonosítóját kell írnod.

function my_path_soflyy_field( $filePath, $field ) {
$customFile = MY_CUSTOM_PLUGIN_ROOT_DIR . '/views/SoflyyField.php';
return $customFile;
}
add_filter( 'wp_all_import_acf_field_view_path_soflyy_field', 'my_path_soflyy_field', 10, 2 );

Ha minden kód a helyén van, a hozzárendelő oldalon megjelenik az egyedi mezőtípus beviteli mezője.

Ezekkel még pontosabban szabályozhatod az egyedi mezőtípus megjelenését.

Szűrő Mire való
wp_all_import_acf_field_view_dir_<mezőtípus> Megadja a fejléc és a lábléc fájljainak helyét az olyan mezőknél, amelyeknek ACF 4 és ACF 5 változata is van (például jelölőnégyzet). Nem kötelező. A fájlnevek: header.php és footer.php.
wp_all_import_acf_field_template_header_path<mezőtípus> Az előző verziófüggő fejléc előtt megjelenő fejléc. Csak akkor kell, ha az alapértelmezett fejléc nem megfelelő.
wp_all_import_acf_field_template_footer_path<mezőtípus> Az előző verziófüggő lábléc után megjelenő lábléc. Csak akkor kell, ha az alapértelmezett lábléc nem megfelelő.
wp_all_import_acf_field_field A $fieldData['type'] érték alapján dönthetsz, hogy felülírod-e az alapértelmezettet, és a saját mezőobjektumot adod vissza, ha nem akarod az osztálybetöltő szűrőt használni.

Mindkét megoldásnál (osztály vagy mezőobjektum) szükség van egy olyan osztályra, amely megvalósítja a szükséges metódusokat és tulajdonságokat, és a pmai_acf_add_on\fields\Field osztályból származik.

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