Yazı meta köprüsü
6 dk okuma
Alanlarınız kendi veritabanı tablolarında yaşar, ancak birçok kod hâlâ WordPress yazı metasıyla çalışır: temalar, içe aktarıcılar, eşitleme araçları, diğer eklentiler. Yazı meta köprüsü bu kodun çalışmaya devam etmesini sağlar. Bir kod get_post_meta(), update_post_meta(), add_post_meta() veya delete_post_meta() işlevini alanlarınızdan birinin anahtarıyla çağırdığında, eklenti wp_postmeta yerine alan grubu tablosundan yanıt verir ya da ona yazar.
// Both lines use the field "color" of a group that is located on posts.
update_post_meta( $post_id, 'color', 'red' ); // stored in the group table, not in wp_postmeta
echo get_post_meta( $post_id, 'color', true ); // "red"Köprü her grup için varsayılan olarak açıktır. Grup başına bir ayardır, bkz. Kapatma.
Nelerin köprülendiği
Bir çağrı, şu koşulların tümü doğruysa köprülenir:
Koşul | Ayrıntı |
|---|---|
Meta anahtarı bir alan anahtarıdır | Oluşturucudaki haliyle üst düzey alan anahtarı (örneğin |
Grup etkindir ve Bridge get_post_meta() and update_post_meta() seçeneği açıktır | Varsayılan olarak açık. |
Alanın bir sütunu vardır | Düzen alanları (tab, accordion...) hariç ve Password alanları asla. |
Nesne bir yazıdır ve grup o yazı için konumlandırılmıştır | Her konum kuralı sayılır (yazı türü, durum, şablon, kategori...): bir yazma yalnızca düzenleme ekranının grubu göstereceği yerde gerçekleşir (doğrulandı: yalnızca taslaklarla sınırlı bir grup, yayımlanmış bir yazı için yazmayı kabul etmedi; değer yazı metasında kaldı). |
Anahtar | Çekirdeğin kendi anahtarlarına ( |
Yazı bir revizyon değildir | |
Anahtar ACF'ye ait değildir | ACF, değerlerinin yanında |
Diğer her anahtar için yapılan diğer tüm çağrılar, herhangi bir sorgu yapılmadan doğrudan WordPress'e gider.
Kullanıcılar, terimler ve yorumlar köprülenmez, yalnızca yazılar köprülenir.
Okuma
get_post_meta( $id, 'color', true ); // the value, typed
get_post_meta( $id, 'color', false ); // [ value ]
get_post_meta( $id ); // NOT bridged: only the real post meta- Köprülenmiş bir okuma dizge değil, türlenmiş PHP değeri döndürür: Number alanı
42veya12.5, True / False alanıtrueveyafalseverir; onay kutusu, yineleyici ve grup alanları dizi verir (wpmcf_get_field()işlevinin biçimlendirme olmadan döndürdüğü değerlerin aynısı). Dizge bekleyen çekirdek kodu bunları dönüştürmelidir. get_post_meta( $id, $key, false )işlevi tam olarak bir girdi içeren bir liste döndürür.- Password alanları, bu şekilde okunan grup ve yineleyici değerlerinde asla görünmez.
- Alanın o yazı için değeri yoksa WordPress her zamanki gibi gerçek yazı metasından yanıt verir. Böylece eklentiden önce yazılmış veya yazı metasına doğrudan yazan kodla eklenmiş değerler yine bulunur.
- Anahtar vermeden
get_post_meta( $id )çağırmak yalnızca gerçek yazı metasını döndürür.
Yazma
Yazma, wpmcf_update_field() ile aynı koddan geçer: alan türü değeri doğrular ve temizler, düzenleme ekranındaki kutu da sonrasında onu gösterir.
Çağrı | Ne olur |
|---|---|
| Alanı ayarlar. |
| Bir önceki değer verildiğinde alan, yalnızca geçerli değeri ona eşitse değiştirilir (çekirdekteki gibi gevşek karşılaştırma). Aksi hâlde |
| Alanın henüz değeri yoksa alanı ayarlar. |
| Benzersiz ekleme: alanın zaten değeri varsa |
| Alanın zaten bir değeri varsa alan ikincisini tutamaz: değer, çekirdekte olduğu gibi gerçek yazı metasında saklanır. Aşağıdaki uyarıya bakın. |
| Alanı temizler (değer boşalır) ve o anahtarın gerçek yazı metası satırlarını kaldırır. |
| Alanı yalnızca geçerli değeri |
| Köprülenmez. Yalnızca gerçek yazı metası satırlarını siler, alan değerlerine dokunmaz. |
Bilmeniz gerekenler:
- Dönüş değerleri çekirdekten farklıdır.
update_post_meta()veadd_post_meta()başarı durumunda (meta kimliği değil)truedöndürür;update_post_meta()hiçbir şey değişmediğinde detruedöndürür. - Alan türünün kullanamadığı bir değer reddedilir. Çağrı
falsedöndürür ve kayıtlı değere dokunulmaz. Doğrulandı: bir Number alanındaupdate_post_meta( $id, 'qty', 'abc' )çağrısıfalsedöndürdü ve kayıtlı42değeri kaldı; geçersiz bir e-posta, Text alanı için bir dizi ve Checkbox alanı için bir dizge de reddedildi. (Boş bir değer reddedilmez:''alanı temizler vetruedöndürür.)falseayrıca yukarıdaki önceki değer uyuşmazlığında ve yazılamayan bir alanda da döner. - Çok değerli alanlar dizi gerektirir.
update_post_meta( $id, 'tags', [ 'a', 'b' ] )bir Checkbox alanı için çalışır.'a','a,b've'["a","b"]'dizgeleri reddedilir; dolayısıyla bu türler için dizge gönderen bir içe aktarıcı alana hiçbir şey kaydetmez. - Yazmalar gerçek yazı metasına düşebilir: grubun konumlandırılmadığı bir yazı (eşleşmeyen herhangi bir kural), tablosu olmayan bir grup, ikinci bir benzersiz olmayan
addve değeri eşleşmeyen birdeleteçağrısında. Bunlar çekirdekteki gibiwp_postmetaiçinde kalır. - Şununla eklenen ikinci bir değer:
add_post_meta()saklanır ama geri okunamaz. Alanın bir değeri olduktan sonraadd_post_meta( $id, 'color', 'second' )çağrısıseconddeğeriniwp_postmetaiçine koyar, ancakget_post_meta( $id, 'color', false )yine yalnızca alanın değerini döndürür. Anahtar başına birden çok değere ihtiyacınız varsa liste tutan bir alan türü (Checkbox, Repeater, Relationship) doğru yerdir. - Yazı mevcut olmalıdır. Var olmayan bir yazı için yazma, çekirdekte olduğu gibi yazı metasına gider.
- Revizyonlar: çekirdek, bir revizyon kimliği üzerindeki
update_post_meta()çağrısını üst yazıya yönlendirir; bu yüzden köprü üst yazının alanına yazar. Bir revizyon üzerindeki okumalar köprülenmez.
ACF'nin kendi anahtarları
ACF, kaydettiği her değerin yanında _{name} = field_xxxx biçiminde bir başvuru saklar. Anahtar için bu başvuru varsa yazı metası ACF'ye aittir: köprü o anahtara hem okumada hem de yazmada dokunmaz. get_post_meta() işlevi, grup tablosunda da o anahtar için bir değer olsa bile ACF'nin kendi yazı metasını döndürür ve yazmalar yazı metasına gider (doğrulandı). Böylece taşınmış siteler ACF'yi eklentiyle yan yana çalıştırabilir, ikisi birbirinin üzerine basmaz; bkz. ACF'den taşıma.
Kapatma
Alan grubunu açın, Settings, Group settings sekmesi: Bridge get_post_meta() and update_post_meta(). Kapalı olması, o grubun anahtarları için tablodan okuma ve tabloya yazma yapılmaması demektir; yazı metası alan hiç yokmuş gibi davranır. Tanımda bu settings.meta_bridge değeridir (varsayılan true); bkz. Grup ayarları.
Ne zaman kapatılır:
- Başka bir eklenti, alanlarınızdan birinin anahtarıyla aynı anahtar altında ilgisiz veri saklıyorsa.
- Bir alan anahtarı, çekirdeğin, bir temanın veya bir eklentinin farklı bir amaçla kullandığı bir meta anahtarına eşitse.
- ACF hâlâ etkinse ve aynı anahtarlara sahipse.
Bir etkin olmayan grup (Active kapalı) da köprülenmez.
İçe aktarıcılarla kullanım (WP All Import ve benzerleri)
Özel alanları update_post_meta() / add_post_meta() ile dolduran içe aktarıcılar, özel alan adı bir alan anahtarına eşit olduğunda doğrudan tablolarınıza yazar. Bu, köprüyü değerleri içe aktarmanın en kolay yolu yapar:
- Alan grubunu istediğiniz alan anahtarlarıyla oluşturun (örneğin
price,sku) ve içe aktardığınız yazı türüne yerleştirin. - İçe aktarıcıda sütunu, adı alan anahtarı olan bir özel alana eşleyin (
price). - İçe aktarmayı çalıştırın, ardından bir yazıyı kontrol edin: değer yazı metasında değil, alanın içindedir.
Denetim listesi:
- Yazı, grubun konum kurallarıyla (yazı türü ve diğer kurallar) eşleşmelidir; aksi hâlde değer yazı metasına gider (yukarıdaki tabloya bakın).
- Değerleri alan türünün kabul ettiği biçimde gönderin: sayılar sayı olarak, tarihler alanın depolama biçiminde, çok değerli alanlar için diziler. Reddedilen bir değer kaydedilmez; bu yüzden başarısız özel alanlar için içe aktarıcının günlüğüne bakın.
- Kendi SQL'iyle
wp_postmetatablosuna yazan bir içe aktarıcı bu işlevleri çağırmaz ve köprülenmez. İçe aktarıcının özel alan seçeneğini kullanın ya da eklentinin kendi araçlarıyla bir CSV'den içe aktarın (veri tabloları bir Pro özelliğidir, bkz. CSV dosyası içe aktarma). - Bir anahtarın birkaç değeri için tekrar tekrar
add_post_meta()çağıran içe aktarıcılar alanda yalnızca ilkini tutar. - Bu sayfa doğrulanırken WP All Import ve diğer içe aktarıcılar kurulu değildi; yukarıdaki davranış, bunların kullandığı çekirdek meta işlevleriyle test edildi.
Performans
Köprülenmiş bir okuma, değeri olan bir yazı için tek satır yüklemeye mal olur; diğer her anahtarda köprü hiçbir şey yapmadan döner, bu yüzden çekirdeği veya diğer eklentileri yavaşlatmaz. Alan anahtarları istek başına bir kez okunur.
Hook'lar
Köprü get_post_metadata, update_post_metadata, add_post_metadata ve delete_post_metadata üzerine bağlanır (öncelik 10, modül fields.meta-bridge). Daha önce yanıt veren (null olmayan bir değer döndüren) bir filtreniz varsa o kazanır ve köprü hiçbir şey yapmaz.
Hâlâ takıldınız mı? Destek ile iletişime geçin