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.
1. lépés: az új osztály megírása
Szekció neve “1. lépés: az új osztály megírása”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
$typetulajdonság (a mezőtípus azonosítója), - a
parsemetódus, - az
importmetó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.
2. lépés: az osztály betöltése
Szekció neve “2. lépés: az osztály betöltése”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.
További szűrők
Szekció neve “További szűrők”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: