Advanced Custom Fields i WordPress

Wordpress

När man lämnat bakdragna drag-and-drop-verktyg bakom sig och börjat se på WordPress som ett seriöst CMS, är Advanced Custom Fields (ACF) ett av de mest kraftfulla verktygen i arsenalen.

Och nej, vi pratar inte om att klicka runt i wp-admin – vi pratar om att registrera fält via PHP, versionshantera dem i Git, och bygga block som faktiskt känns native i blockeditorn.

ACF via PHP

Genom att definiera dina fältgrupper med acf_add_local_field_group() slipper du den ömtåliga JSON-syncen mellan databasen och projektfiler. Dina fält hamnar direkt i koden där de hör hemma – versionerade, testbara och lätta att deploya.

<?php
if ( function_exists( 'acf_add_local_field_group' ) ) {
	$fields = [
		[
			'key' => 'field_fallback_image_tab',
			'name' => 'fallback_image_tab',
			'label' => esc_html__( 'Choose a fallback image', 'wptheme' ),
			'type' => 'tab',
		],
		[
			'key' => 'field_fallback_image',
			'name' => 'fallback_image',
			'label' => esc_html__( 'Choose image', 'wptheme' ),
			'type' => 'image',
			'preview_size' => 'medium',
			'required' => 1,
		],
	];

	$location = [
		[
			[
				'param' => 'options_page',
				'operator' => '==',
				'value' => 'acf-options-image-properties',
			],
		],
	];

	acf_add_local_field_group(
		[
			'key' => 'image_properties_group',
			'title' => esc_html__( 'Image Properties', 'wptheme' ),
			'fields' => $fields,
			'location' => $location,
		]
	);
}

Vill du lägga till logik för conditional fields, repeater-loops, relationer? Gå loss. ACF’s PHP API är stabilt, dokumenterat, och du slipper konstant ”exportera om JSON-filen för att den glömdes i staging”.

Blockutveckling med ACF

Med acf_register_block_type() kan du skapa anpassade block för Gutenberg-editorn, utan att behöva sätta upp en fullständig React-miljö. Du behåller all kontroll, skriver block i PHP/HTML, och kan skräddarsy både funktion och utseende.

<?php
add_action(
	'acf/init',
	function () {
		acf_register_block_type(
			[
				'name' => 'image-mosaic',
				'title' => esc_html__( 'Image mosaic with 4 images', 'wptheme' ),
				'description' => esc_html__( 'Build your own image mosaic. You always have to use 4 images and choose the design that works for you.', 'wptheme' ),
				'render_template' => get_template_directory() . '/components/image-mosaic/image-mosaic.php',
				'supports' => [
					'align_content' => false,
					'align' => false,
					'jsx' => true,
					'mode'   => false,
					'anchor' => true,
				],
				'example' => [
					'attributes' => [
						'mode' => 'preview',
						'data' => [
							'preview_image_image_mosaic' => '/components/image-mosaic/image-mosaic-preview.png',
							'is_preview' => true,
						],
					],
				],
				'icon' => 'align-pull-right',
				'keywords' => array( 'text', 'content', 'image' ),
				'category' => 'my-block-category',
			]
		);

		$fields = [
			[
				'key' => 'field_image_mosaic_design',
				'name' => 'image_mosaic_design',
				'label' => esc_html__( 'Choose design', 'wptheme' ),
				'type' => 'radio',
				'allow_null' => 0,
				'choices' => [
					'design-1' => esc_html__( 'Design 1', 'wptheme' ),
					'design-2' => esc_html__( 'Design 2', 'wptheme' ),
					'design-3' => esc_html__( 'Design 3', 'wptheme' ),
					'design-4' => esc_html__( 'Design 4', 'wptheme' ),
					'design-5' => esc_html__( 'Design 5', 'wptheme' ),
				],
				'default_value' => 'design-1',
				'return_format' => 'value',
				'ui' => 1,
			],
			[
				'key' => 'field_image_mosaic_image_repeater',
				'name' => 'image_mosaic_image_repeater',
				'label' => esc_html__( 'Images', 'wptheme' ),
				'button_label' => esc_html__( 'Add images', 'wptheme' ),
				'type' => 'repeater',
				'layout' => 'block',
				'min' => 4,
				'max' => 4,
				'required' => 1,
				'sub_fields' => [
					[
						'key' => 'field_image_mosaic_image_repeater_img',
						'name' => 'image_mosaic_image_repeater_img',
						'label' => esc_html__( 'Choose image', 'wptheme' ),
						'type' => 'image',
						'preview_size' => 'thumbnail',
					],
				],
			],
		];

		$location = [
			[
				'param' => 'block',
				'operator' => '==',
				'value' => 'acf/image-mosaic',
			],
		];

		acf_add_local_field_group(
			[
				'key' => 'field_block_image_mosaic',
				'title' => esc_html__( 'Image mosaic with 4 images', 'wptheme' ),
				'fields' => $fields,
				'location' => $location,
			]
		);
	}
);

Det ger dig möjlighet att skapa fullt anpassade block – med alla fördelar som kommer med WordPress native-funktionalitet.

Därför fortsätter ACF att vara ett självklart val

  • Strukturerad datamodellering: ACF gör det enkelt att bygga informationsmodeller som speglar innehållets logik, oavsett om det gäller enkla fält eller avancerade repeater fields.
  • Fullständig kontroll över frontend: Du styr själv exakt hur innehållet presenteras – inga överraskningar i markup eller styling.
  • Brett stöd i communityn: ACF är ett etablerat verktyg i WordPress-världen med ett stort användarstöd och hög kompatibilitet.

Sammanfattning

ACF är ett värdefullt verktyg för utvecklare som vill bygga professionella, skalbara och välstrukturerade WordPress-lösningar. Genom att arbeta med fältdefinitioner i PHP får du full kontroll över både logik och implementation – utan att kompromissa med kodkvalitet eller utvecklingsflöde.