| 开发者 | fieldstonewp |
|---|---|
| 更新时间 | 2026年10月10日 01:01 |
| PHP版本: | 8.0 及以上 |
| WordPress版本: | 7.1 |
| 版权: | GPLv2 or later |
| 版权网址: | 版权信息 |
wp_postmeta. That means faster queries and no postmeta bloat. A postmeta mirror (on by default) keeps a plain copy of every value where the rest of the ecosystem expects it, so your SEO, backup, export and search plugins keep working untouched.
Already using Advanced Custom Fields? Fieldstone imports your ACF field groups in one click and copies the values ACF saved with a second, warning in plain English about anything that can't map one-to-one. It only reads your ACF data, so you can run both side by side while you check. The template API is familiar too — fstn_get_field() and fstn_the_field() work the way you'd expect.
Why developers choose Fieldstone
fstn_form() with validation, a honeypot and rate limiting.fstn_form() renders a group on the front of the site and accepts the submission, with validation, a honeypot and rate limiting. What the form targets is stored on the server, never in the page, so a submission cannot be edited into writing somewhere else.[fieldstone field="subtitle"] prints a value anywhere, always escaped.wp fstn acf copy-values.wp fstn json status|sync, wp fstn mirror rebuild, wp fstn table status.fstn_get_field(), fstn_the_field() (escaped by default), fstn_update_field(), fstn_register_field_group(), and a stable extension contract for custom field types.fstn_get_field( $name, $context, $format ) — returns a field value (formatted by default). You escape the output.fstn_the_field( $name, $context ) — echoes the value already escaped with esc_html(). Best for plain text.fstn_get_fields( $context ) — returns all values for an object as a name => value array.fstn_update_field( $name, $value, $context ) — sanitizes and stores a value.fstn_delete_field( $name, $context ) — deletes a value.$context defaults to the current post in The Loop. It also accepts a post ID (123), 'option' for site-wide values, 'user_5' for a user, 'term_12' for a term, or a WP_Post / WP_User / WP_Term object.
Displaying each field type
Text / Textarea / Email — returns a string ('' when empty).
`
`
URL — returns an escaped URL string.
<a href="<?php echo esc_url( fstn_get_field( 'website' ) ); ?>">Visit</a>
Number — returns an int (or float when decimals are enabled), null when empty.
`
$<?php echo esc_html( number_format( $price, 2 ) ); ?>
`
True / False — returns a bool.
`
Featured
`
Select / Radio — returns the chosen value as a string. A select with "Allow multiple" returns an array of strings.
`
`
Checkbox — returns an array of the checked values.
`
**Image** — return format is a per-field setting:array(default) returnsid,urlandalt;urlreturns the URL string;id` returns the attachment ID.
`
<img src="<?php echo esc_url( $img['url'] ); ?>" alt="<?php echo esc_attr( $img['alt'] ); ?>" />
With return formatid, use core helpers for responsive images:echo wp_get_attachment_image( fstn_get_field( 'headshot' ), 'large' );`
File — same formats as image; the default array carries id, url and filename.
`
<a href="<?php echo esc_url( $file['url'] ); ?>" download><?php echo esc_html( $file['filename'] ); ?>
**WYSIWYG** — returns formatted HTML. Print withwp_kses_post()`.
`
**Date** — returns a string in the field's return format (defaultY-m-d),null` when empty.
`
<time datetime="<?php echo esc_attr( $date ); ?>"><?php echo esc_html( date_i18n( 'F j, Y', strtotime( $date ) ) ); ?>
**Color** — returns a hex string:#rrggbb, or#rrggbbaa` when opacity is below 100%.
<span style="background: <?php echo esc_attr( fstn_get_field( 'brand_color' ) ); ?>;"></span>
Post Link (relationship) — returns a WP_Post object by default, or the post ID with return format id.
`
<a href="<?php echo esc_url( get_permalink( $related ) ); ?>"><?php echo esc_html( get_the_title( $related ) ); ?>
`
Reading many fields at once
`
`
Options, users and terms
`
`
/wp-content/plugins/fieldstone/, or install it through the WordPress plugins screen.Use fstn_the_field( 'field_name' ) for escaped plain text, or $value = fstn_get_field( 'field_name' ) when you need the raw formatted value (arrays for checkboxes, WP_Post for post links, and so on). See the Displaying each field type section in the Description for a complete example per field type.
Yes. Complete documentation for both the free plugin and Fieldstone Pro — covering every field type (how to add and configure it, what it stores, and how to display it in a theme), the template-function reference, Pro loop and relationship guides, and advanced topics — is at https://fieldstonewp.com/docs/.
The AI features are optional and off by default. They use your own Anthropic API key (pay-as-you-go with Anthropic, typically a few cents per request) and send only the description you type, or — when asking for missing fields — the title and field list of the group you are editing. The request goes directly to api.anthropic.com, never through any Fieldstone server, and your posts and field values are never sent. Tip: create a dedicated API key with a monthly spend limit. See the "External services" section for details.
Yes. With ACF active, an import banner appears on the Fieldstone field-groups screen listing your ACF groups. Importing recreates a group as a Fieldstone definition and creates its storage table; anything that has no equivalent in the free build is reported as a warning rather than silently dropped. Your ACF groups and their data are left exactly as they were, so you can run both while you check the result. Importing brings the field definitions. To bring the values across, press Copy values from ACF in the panel that appears on the same screen. It reads ACF's data without changing it, keeps anything Fieldstone already holds, and can be run again safely.
Field values live in dedicated tables (one per field group, one row per post). By default every value is also mirrored into postmeta so other plugins can see it. Turning the mirror off is possible in Settings, but it will hide Fieldstone data from plugins that read postmeta.
No. By default all data is kept. There is an explicit opt-in setting ("Remove all data on uninstall") if you want a full cleanup.
Yes. Create a fieldstone-json folder inside your uploads directory (wp-content/uploads/fieldstone-json) and every save writes the definition there as JSON (the folder is protected from direct web access). Definitions in that folder load with priority and can be synced with wp fstn json sync.
Fieldstone works on individual sites in a multisite network. There is no network-level UI yet.
Yes. Fieldstone Pro adds the advanced field types — Repeater, Flexible Content, Group, relational fields (Post Object, Relationship, User, Taxonomy), Gallery, Clone, Options pages, block bindings and more — all with the same custom-table storage, plus automatic updates and support. The free plugin is fully functional without it. See the "Free vs Pro" section above, or plans and pricing at https://fieldstonewp.com/pricing/.
Yes. A postmeta mirror is on by default, so every value is also written to wp_postmeta where the rest of the WordPress ecosystem expects it — SEO variables, backups, exports and search plugins keep working. If you ever need to rebuild the mirror in either direction, use Fieldstone → Tools or wp fstn mirror rebuild.
Fieldstone does not ship native page-builder integrations. Because the postmeta mirror is on by default, your Fieldstone values are available through standard custom-field/postmeta lookups, and you can always output them with the template functions (fstn_get_field()) or the [fieldstone field="…"] shortcode.
Yes — that is how migration works. Keep Advanced Custom Fields active, import your groups into Fieldstone, and check the result before switching. Fieldstone's template functions use the fstn_ prefix (fstn_get_field(), fstn_the_field()), so they do not collide with ACF's functions and both can run side by side.
Yes. Fieldstone is free and open source under the GPLv2 (or later), so you can use it on unlimited personal, commercial and client sites at no cost. Fieldstone Pro is an optional paid upgrade for the advanced field types.
Ask in the support forum, and see the full documentation at https://fieldstonewp.com/docs/.
wp fstn acf copy-values.fstn_form() renders a field group on the front of your site and accepts the submission — create a post or edit an existing one, with validation, a honeypot and rate limiting for logged-out visitors. What a form targets is stored on the server and never in the page, so a submission cannot be edited into writing somewhere else.[fieldstone field="subtitle"] shortcode. Output is always escaped; there is no attribute to turn that off.title field in two different groups — no longer silently vanish on save. Field keys are unique to their group now, and an existing key is never written over.