PHP API
3 dk okuma
wpmcf_resolve_variables()
wpmcf_resolve_variables( string $template, ?EvaluationContext $context = null ): stringHer {{ }} bloğunu $template içinde değiştirir ve metni döndürür. Blokların dışındaki her şey korunur.
echo esc_html( wpmcf_resolve_variables( 'Hello {{ glb.company }}, it is {{ sys.year }}.' ) );
// Hello Acme, it is 2026.Durum | Sonuç |
|---|---|
Eklenti henüz başlatılmadı ( | Şablon değiştirilmeden döner |
Motorun içinde beklenmeyen bir hata | Şablon değiştirilmeden döner; hata |
Değerlendirilemeyen bir blok | O blok boş kalır; geri kalanı çözümlenir |
Bağlam yok, döngü içinde | Döngüdeki yazı ( |
Bağlam yok, herhangi bir yazının dışında | Nesne yok: |
Şu türde bir bağlam: |
|
Dönüş değeri escape edilmez. Gideceği yere göre escape edin (esc_html(), esc_attr(), wp_kses_post()). Ayrıca saklanan alan değerlerindeki "ifadeleri kimin çalıştırabileceği" denetimine tabi değildir, çünkü güvenilir koddur: ona ziyaretçi girdisi vermeyin. Bkz. Güvenlik.
wpmcf_make_context()
wpmcf_make_context( ?int $object_id = null, string $context_type = 'post', array $source_values = [] ): EvaluationContextMotora fg ve wp.post_* ifadelerinin hangi nesneye işaret ettiğini ve src içinde ne bulunduğunu bildiren bağlamı oluşturur.
Argüman | Anlamı |
|---|---|
| Nesne kimliği. Belirtilmezse veya |
|
|
| Şu şekilde okunabilen bir dizi: |
// A field of a specific post
$ctx = wpmcf_make_context( 42 );
echo esc_html( wpmcf_resolve_variables( '{{ fg.product.price | number(2) }}', $ctx ) );
// A field of a term
$ctx = wpmcf_make_context( $term->term_id, 'term' );
echo esc_html( wpmcf_resolve_variables( '{{ fg.category_extra.headline }}', $ctx ) );
// Values of your own
$ctx = wpmcf_make_context( null, 'post', [ 'city' => 'London', 'n' => 10 ] );
echo esc_html( wpmcf_resolve_variables( "{{ src.city == 'London' ? 'Capital' : 'City' }}", $ctx ) );Değerlendirme bağlamı
WPMass\CustomFields\Variables\Context\EvaluationContext değiştirilemezdir: her with* metodu değiştirilmiş bir kopya döndürür.
Metot | Amaç |
|---|---|
| Boş bir bağlam (nesne yok, tür |
| Nesneyi ayarlar |
|
|
| Şunun için değerler: |
| Ad alanı çözümleyicileri için serbest biçimli veri (örneğin |
| Geri okur |
$ctx = wpmcf_make_context( $term->term_id, 'term' )->withMeta( 'term_id', $term->term_id );
echo esc_html( wpmcf_resolve_variables( '{{ wp.term_name }} ({{ wp.term_slug }})', $ctx ) );Motor
$engine = wpmcf_variable_engine(); // ?VariableEngine, null until the plugin has bootedMetot | Döndürür |
|---|---|
| Çözümlenen metin |
| Şuna benzer: |
| Metnin şunu içerip içermediği: |
| Kayıt defteri |
$engine = wpmcf_variable_engine();
if ( $engine ) {
$html = $engine->resolveEscaped(
'<p class="price">{{ fg.product.price | number(2) }}</p>',
wpmcf_make_context( get_the_ID() ),
'esc_html'
);
}resolve() kendisi, wpmcf_resolve_variables() gibi istisnalara karşı korunmaz. Fonksiyonu tercih edin, ancak resolveEscaped() gerekiyorsa bunu kullanın.
Kayıt defteri
$registry = wpmcf_variable_registry(); // ?VariableRegistryMetot | Amaç |
|---|---|
| Bir ad alanı ekler (bir closure, çözümleyiciyi ilk kullanımda oluşturur) |
| Bir filtre ekler. |
| Şunun için bir fonksiyon ekler: |
| Varlık kontrolleri (adlar küçük harfe çevrilir) |
| Küçük harfli adların listeleri |
Bir adı yeniden kaydetmek, önceki girdinin yerini alır.
Motoru genişletme
Ad alanlarını, filtreleri ve fonksiyonları wpmcf/variables/register action'ından ekleyin. Kayıt defterini alır ve eklenti başlatıldıktan sonra kayıt defteri oluşturulduğunda yalnızca bir kez tetiklenir.
use WPMass\CustomFields\Variables\Context\EvaluationContext;
use WPMass\CustomFields\Variables\Namespace\NamespaceResolverInterface;
use WPMass\CustomFields\Variables\Registry\VariableRegistry;
final class My_Resolver implements NamespaceResolverInterface {
public function resolve( array $path, EvaluationContext $ctx ): mixed {
// {{ my.rating }} → $path = [ 'rating' ]
return match ( $path[0] ?? '' ) {
'rating' => (string) get_post_meta( (int) $ctx->getObjectId(), 'rating', true ),
default => null, // null renders nothing
};
}
public function getNamespace(): string {
return 'my';
}
}
add_action( 'wpmcf/variables/register', function ( VariableRegistry $registry ): void {
$registry->registerNamespace( 'my', new My_Resolver() );
$registry->registerFilter( 'shout', fn ( $value, $suffix = '!' ) => strtoupper( (string) $value ) . $suffix );
$registry->registerFunction( 'sum_all', fn ( ...$numbers ) => array_sum( $numbers ) );
} );Artık {{ my.rating }}, {{ glb.name | shout('?') }} ve {{ fn.sum_all(1, 2, 3) }} çalışır.
Eklentiler için kurallar:
- Düz değerler döndürün. Metin, sayı, boolean,
nullveya liste. Listeler şu ayraçla birleştirilerek yazdırılır:,;nullvefalsehiçbir şey yazdırmaz;trueise1yazdırır. - Yola asla güvenmeyin.
$patheditörlerden gelir. İşlediğiniz adları beyaz listeye alın (yukarıdakimatchgibi) ve yalnızca herkese açık yazdırılması güvenli verileri okuyun. - Sırları yazdırmayın. Parolalara ve anahtarlara erişilememelidir. Yerleşik
fgveglbçözümleyicileri parola değerlerini hariç tutar; bu kurala uyun. - Adlar harf, rakam ve alt çizgiden oluşur ve büyük/küçük harf duyarsız eşleşir.
fn,func,fonkvefunctionfonksiyon çağrıları için ayrılmıştır. - Exception fırlatmak güvenlidir (blok boş çıkar), ancak
nulldöndürmek daha temizdir.
Zamanlama
Dinleyici, kayıt defteri başlatma sonrasında oluşturulmadan önce eklenmelidir. Eklenti dosyanız yüklenirken veya plugins_loaded sırasında ekleyin. Bundan sonra çalışabiliyorsanız action'ı atlayın ve doğrudan kayıt defterine kaydedin:
$registry = wpmcf_variable_registry();
if ( $registry ) {
$registry->registerFilter( 'shout', fn ( $value ) => strtoupper( (string) $value ) );
}Bağlama istek verisi ekleme
Bu wpmcf/variables/context filtresi, bir modülün her üst düzey değerlendirmenin başında bağlama veri eklemesini sağlar. Programatik SEO bunu, oluşturulan bir sayfadaki alan değerlerinin sayfanın veri satırına erişmesi için kullanır.
add_filter( 'wpmcf/variables/context', function ( EvaluationContext $ctx ): EvaluationContext {
return $ctx->withMeta( 'campaign', 'spring-sale' );
} );İfade kullanmadan değer okuma
Şablona değil yalnızca bir değere ihtiyacınız olduğunda wpmcf_get_field() ve wpmcf_get_global() kullanın. Bunlar, saklanan değerin içindeki {{ }} ifadelerini Değişkenlerin çalıştığı yerler bölümündeki kurallara göre bir kez değerlendirir.
Hâlâ takıldınız mı? Destek ile iletişime geçin