Bir WordPress Özel Alanı Nasıl Oluşturulur ve Kullanılır
Bu makalede, Post Meta olarak da adlandırılan WordPress Custom Alanı ile nasıl çalışılacağı açıklanmaktadır. İçinde, PHP Meta Post WordPress işlevinin, özellikle GET_POST_META () ve update_post_meta () ‘nın nasıl kullanılacağını açıklıyoruz ve POD ve gelişmiş özel alanlar gibi özel saha araçlarıyla çalışmak için -derinlemesine kod gösterileri ve pratik öneriler sağlıyoruz. Bu WordPress özel tartışması, olağanüstü, yukarı ve çalışan WordPress kursumuzun bir bölümüdür. Bilgili olan bir WordPress geliştiricisi olmak istiyorsanız, yukarı ve koşu en iyi yoldur ve bunu başarmak için ziyaret edilir.
WordPress’in gelişimini öğrenmenin en iyi yolu uyan ve bugün koş!
“Bence WordPress’in gelişimini öğrenmek isteyen herkes bu kursu gerektiriyor. Videoyu izlemek açılan bir grup ışık gibi.” -Jason, WordPress geliştiricisi
Uyan ve şimdi koş
Bu makale aynı zamanda özel WordPress (Meta Post) ve özel taksonomi alanındaki daha büyük bir ücretsiz dizinin bir parçasıdır. Özel bir alanın ne olduğunu bilmek istiyorsanız ve Meta POS’un bir bölümünü eklemeniz veya özel bir taksonomi yapmanız gerekip gerekmediğini bilmek istiyorsanız, makale serisine bakın. Şimdi okumaya devam edin.
Ana paketler:
Özel alan verileri “Özel Alan” Post Düzenleyicisi bölümündeki gönderiye eklenebilir veya The_Post_Meta () güncellemesi kullanılarak programlanabilir. Update_post_meta () ayrıca belirli gönderiler için özel alanların değerini değiştirme işlevidir. Saklandıktan sonra, get_post_meta () kullanılarak özel alan verilerine erişilebilir. Bu işlev her zaman bir posta kimliği gerektirir; Döngüde, bu kimliği get_the_id () ile bulabilirsiniz, ancak dışarıda başka yöntemleri kullanmanız gerekir.
Özel saha verileri ile çalışmak için son önemli işlev, belirli gönderiler için belirli özel alan verilerini yok eden delete_post_meta () ‘dir.
Kullanıcıların özel alanlara girmesi ve değiştirmesi için çekici bir kullanıcı arayüzü yapmak zor ve işgücü yoğundur WordPress. Sorunları çözmek için bazı iyi eklentiler ve projeler var ve işlemi manuel olarak denemeden önce kullanmak iyidir.
Bu bölümde, hem WordPress yönetici arayüzünden hem de programlanmış özel alan verilerinin nasıl ekleneceğini ve verilerin nasıl kullanılacağını, değiştirileceğini ve silineceğini tartışacağız.
Özel alan, wp_postmeta veritabanı WordPress tablosunda özel olarak nasıl çalışır (WP_’nin diğer veritabanı tercihlerine değiştirilebileceğini unutmayın) ve şöyle görünür:
Gördüğünüz gibi, özel alan önemli bir çift/basit değerdir: alan, özel alanın (meta_key) adını belirli bir yazı (Post_ID) için özel alanın (meta_value) değerine eşler. Bu üç öğenin dışındaki özel alanlara ait olan tek veri benzersiz bir kimliktir (meta_id). Depolamadan sonra, özel alan verileri birkaç basit WordPress işleviyle alınabilir ve kullanılabilir, değiştirilebilir ve silinebilir. Aşağıdaki yayına özel alan verileri eklemek, gönderiye manuel olarak özel alan verileri eklemek için varsayılan arayüzdür: çoğu arayüze kıyasla, bu oldukça çekici olmayan ve kullanımı zordur; Aşağıda yeni bir arayüz yapmak için bazı önerilerde bulunacağız. Özel alan verilerini kullanarak özel alan verilerine erişmek için en kullanışlı WordPress işlevi get_post_meta () olarak adlandırılır. (Diğerleri, the_meta () ve get_post_custom () dahil olmak üzere var, ancak her ikisi de kaldırılmaya değer olacak şekilde oldukça garip davranıyor.) Get_post_meta () nasıl çalıştığını görmek için çeşitli ortamlarda kontrol edelim.
İlk dairede, döngüde get_post_meta () deneyelim: <? Php / * eklenti adı: wspout içerik için favori lezzet ekleyin * / işlev wspout_favorite_flover_subtitle ($ fave_flavle = get_post_meta (get_the_id (), true); if (boş ($ fave_flave)) {return $ content; } $ fave_flave_string = ' şu anki favori lezzetim:'. $ fave_flave. '
‘; Dönüş $ fave_flave_string. $ içerik; } add_filter (‘the_concent’, ‘wspout_favorite_flover_subtitle’); Yukarıdaki ekran görüntüsüne özel alanı ayarladığımız yazıda şu sonucu alıyoruz: Eklentideki döngüde mi? Birincisi: Bir eklenti yazıyorsak nasıl döngüde olabiliriz? Bu önemli bir nokta. Cevap, döngüde meydana gelen bir filtre kancası olan The_Concent’e bağlı olduğumuzdur. The_Content kancaları, the_content () veya the_excerpt () çalıştırma etiket filtresinden hemen önce tetiklenir. Fabrika benzetmemize geri dönelim: The_Concent’e bağlanarak, döngüyü çalıştıran fabrikaya çekildik. Başka yerlere bağlıysak – örneğin, bir sonraki örneğimiz olan Body_class – yukarıdaki kod işlev görmez.
Posta Kimliği. Bu, get_post_meta () tüm çağrıları için gereklidir. Yukarıdaki örnekte, döngüde olduğumuz için, geçerli yayın verilerini otomatik olarak alan get_the_id () şablonu etiketini kullanabiliriz. Özel Alan Anahtarı. Bu anahtarı WSPOUT_CURRENT_FOVOTITE_FLOOVER – yazımızın “Özel Alan” kutusuna ayarladık. Bu argüman isteğe bağlıdır; Doldurmazsanız, tüm özel alanlardan ilişkisel diziler alacaksınız.
Özel alan değerinizi bir dize olarak mı istiyoruz. Eğer true olarak ayarlanırsak, burada yaptığımız gibi, bir dize alırız; Eğer terk edersek veya yanlış olarak ayarlarsak, bir dizi yeniden kazanacağız. Burada (ve çoğu zaman) basit şeyleri korumak için doğru olarak ayarlanmıştır.
eğer (boş ($ fave_flave)) {} Bu kod parçası, almaya çalıştığımız meta gönderinin bir değeri yoksa sadece “daha erken” dır, bu yüzden sonunda bunu olmayan gönderiyi değiştirmiyoruz özel alan.
$ Fave_flave boş olup olmadığını kontrol ediyoruz, çünkü özel bir alan yoksa, get_post_meta () dönüş S dizesi boş. Bu yüzden notları gerçekten geri alıp almadığımızı veya sadece boş bir dizeyi kontrol ediyoruz. (Üçüncü argüman get_post_meta () elenirse veya yanlış olarak ayarlanırsa, bunun yerine boş dizi döndürür.) Filtrelere bağlı olduğumuz için – Filtreler kullanarak – verdiklerimizi iade etmeliyiz, bu yüzden $ iade ediyoruz değişmeyen içerik. $ fave_flave_string = $ fave_flave değişkenimizi bildiğimiz için, bu değişkeni kullanarak bir dize oluşturuyoruz. $ fave_flave_string döndür. $ içerik; Bu, ana gönderi içeriği dizesinden önce yaptığımız dizeyi ekler ve WordPress’in yapılması için döndürülen dönüş içeriği. add_filter (‘the_content’, ‘wphout_favorite_flover_subtitle’); Gönderinin ana içeriği sayfaya yazdırılmadan hemen önce çalışan The_Concent’e bağlıyız. WordPress the the the WordPress çalıştırdığında çalışır, böylece çalıştırılacak şekilde kendi işlevlerimizi ilişkilendiririz, böylece çalışır, böylece çalışır. Tüm filtreler ilgili işlevlerine yönelik bağımsız değişkenlere devam ettiği için, wpshout_favorite_flover_subtitle () ‘nin değiştirilmiş olsun ya da olmasın döndürülen bir bağımsız değişkene sahip olduğunu unutmayın.
Aşağıdaki dairenin dışında, döngü dışında özel alanların kullanılmasıdır. Bu, bir gönderideki bu özel alana dayanmaktadır:
Aşağıdaki koda dayanarak, tanımladığımız özel sınıfı, Kitties-Sınıfı, yazımızın HTML’sinin gövde öğesine ekleyeceğiz. (Düzenledik. Efektler için Kitties-Sınıfı!) Sonuç şöyle görünecek: ve bu koddur: id, ‘wspspout_custom_body_class’, true); if (boş ($ custom_body_class)) {return $ classics; } $ sınıflar [] = $ Custom_body_class; Dönüş $ sınıfları; } add_filter (‘body_class’, ‘wspspout_add_custom_body_class’); Yeni kod parçalarını izleyelim-son örneğe çok benzeyen bazı parçaları kaçıracak. Eğer (! Is_singular) {} Bu kod tüm web sayfalarından sınıfını değiştirdiğinden, bazı yayınların bir kerede çalıştırılmasını istemiyoruz. Başka bir deyişle, yalnızca tek bir web sayfasına bir yaklaşım olarak mantıklıdır. Bu kod yalnızca “daha erken” Post paketi içinde birden fazla gönderi varsa. IS_Singular () gibi koşullu hakkında daha fazla bilgi için, bkz. Koşullu WordPress etiketleri. Global $ Post Bu çizgi çok önemli. Global, WordPress sürecinin arka planındaki değişkenler ve nesnelerin bir koleksiyonu olan ve WordPress’e “ne olduğunu” söyleyen “bir glordpress küresel durumunda yüzen” anlamına gelir. Global $ Post; Global $ POST’a yerel olarak, geçerli işlevde $ POST adıyla erişmemizi sağlar.
$ Post nedir? Bu, mevcut yazı hakkında çok fazla bilgi içeren WordPress’in küresel durumunda bulunan büyük bir PHP nesnesidir. $ POST ile konuşmalıyız çünkü get_post_meta () çalıştırabilmek için geçerli yayın kimliğini bilmemiz gerekiyor. Bu karmaşık bir konudur: PHP nesnelerinin sözdizimine ve biraz küresel koşullar hakkında girer. $ POST’u, bir web sayfası oluşturmak için WordPress tarafından kullanılan mevcut yayın hakkında doğrudan bir bilgi kaynağı olarak düşünün. $ post-> Bu kimlik doğrudan önceki satırdan geldi. Bir gönderi kimliği istiyoruz – bu olmadan, get_post_meta () çalıştıramayız – ve rahat olduğumuz için rahat olan get_the_id () şablon etiketlerimize erişimimiz yok. Özelliklerden biri için $ POST gibi nesneler nasıl istenir Sözdizimi PHP nesneleridir: bu durumda, $ post-> id. Bu kodu bize verilen şey, mevcut yayının kimliğidir (bu da bu sayfayı yüklemek için alınan tek gönderidir, çünkü bunun tek bir sayfa olduğunu biliyoruz). $ sınıflar [] = $ Custom_body_class; İlişkilendirdiğimiz olay olan Body_Class, bize yapılacak bir değişken, $ sınıf verdi. $ Sınıflar, WordPress’in web sayfası etiketine eklenmeyi planladığı bir sınıf satırıdır. Şuna benziyor: Array (‘tek’, ‘tek post’, ‘Postid-2196’, ‘tek format standart’, ‘günlüğe kaydedilmiş’, ‘Yönetici-Bar’). Dizilerle konuşmak, dizeler gibi diğer veri türleriyle konuşmaktan farklıdır. Bu durumda, diziye diziye öğeler eklemek istersiniz ve diziye tek bir öğe eklemek için PHP sözdizimi: $ array_name [] = $ thing_to_add;
. Yeni dizi öğesi ile $ sınıf dizisine ekleniriz, geriye kalan tek şey daha fazla işleme için değiştirilmiş $ sınıflarını iade etmektir. Bunu bir dönüş $ sınıflarıyla yapıyoruz; . add_filter (‘body_class’, ‘wspspout_add_custom_body_class’); Bu kez, döngü yürümeden çok önce gerçekleşen bir olay olan Body_Class’a bağlıyız. Bu yüzden yukarıdaki Global $ gönderisini kullanmalıyız. Body_class’a bağlandığımızda, bize değiştirilmesi ve döndürülmesi için bir dizi $ sınıfı verir, örneğin the_content bize Dize $ içeriği verir. (Bu arada, $ sınıflar ve $ içerik, kendilerine karar verdiğimiz değişkenlerin adlarıdır, ancak çok akıllı bir isimdirler, çünkü içinde ne olduğunu açıklarlar.) Şimdiye kadar programlanan özel alanları ekleyin, değiştir ve silin, Sadece özel alanlardan veri nasıl alınacağını tartışıyoruz. Geliştiriciler için bir başka genel görev, programlanan bu verileri değiştirmek veya silmektir. Bunun işlevi oldukça basit:
Update_post_meta (), bazı özel alan değerlerini gönderilere eklemek veya güncellemek için bir işlevdir. Bu aşağıdaki gibi görülebilir: update_post_meta ($ post_id, $ meta_key, $ meta_value, $ prev_value); Argüman, sırayla: $ Post_id: Etkilenecek olan kimlik yayınları
$ Meta_key: Etkilenecek özel alan adı (en son örnek için bu ‘wspspout_custom_body_class’ olacaktır)
$ meta_value: Geçerli değer özel alan tarafından alınmalıdır – bu bir dize, tamsayı, dizi veya diğer veri türleri ihtiyaçlarınıza bağlı olabilir
$ prev_value: Bu isteğe bağlı parametre, yinelenen meta anahtarları işler; Neredeyse her zaman bir not olarak ortadan kaldırabilirsiniz, WordPress ayrıca add_post_meta () adlı benzer bir işlev taşır, ancak güncelleme_post_meta () çoğu durumda daha iyidir, çünkü yeni veya yenilenirse özel bir alan ekleyecektir. delete_post_meta () delete_post_meta () Bir yazı için özel bir alanı silin. Bu aşağıdaki gibi görülebilir: delete_post_meta ($ post_id, $ meta_key, $ meta_value); argümanları:
$ Post_id: Etkilenecek gönderinin kimliği
$ meta_key: Gönderinin meta verilerinden silinecek özel alanın adı
$ meta_value: Bu isteğe bağlı parametre, yinelenen meta tuşları işler; Her zaman her zaman atlayabilirsin
Özel bir alanı güncellemek ve silmek: Eklenti takip eden bir muayene ilginç davranış açısından, ancak update_post_meta () ve delete_post_meta () göstermek için iyidir. İşlevselliği şudur:
Bir yayının içeriği her yüklendiğinde sayın ve Gönderi içeriğinden önce sayımı görüntüleyin.
Ana sayfa ziyaret edildiğinde, ana sayfaya yüklenen her yazı için sayımı 0’a sıfırlayın.
Sonuç aşağıdaki gibi görünüyor:
Bu sayı, sayfayı her yeniden kullandığınızda 1 artar ve verandayı her ziyaret ettiğinizde sıfırlayın.
Ve bu koddur: <? PHP / * Eklenti Adı: WPSHOUT SAYILAR İçerik yüklendi * / işlev wspout_count_times_content_loaded ($ content) {// (is_front_page ()) wspout_times_content_loaded '); $ Content iade; } // Sayımı alın; Sayı 0'dır. if (boş ($ post_loads_count)) {$ post_loads_count = 0; } // Sayıya 1 ekleyin ve $ Post_loads_Count ++ kaydedin; update_post_meta (get_the_id (), 'wspout_times_content_loaded', $ post_loads_count); // Güncellenmiş sayımı ve ana yayın içeriğini döndürür '
İçerik Yüklü'. $ Post_loads_count. 'Times
'. $ içerik; } add_filter ('the_content', 'wspout_count_times_content_loaded'); Bu eklenti ne kadar olursa olsun, bu bölümün geri kalanını takip ederseniz sizi şaşırtan hiçbir şey olmamalıdır. Varsayılan WordPress özel alanının kullanıcı arayüzünü çeken özel bir kullanıcı arayüzü yapmak çekici ve kullanımı zor değildir. Ne yazık ki, WordPress Core yazılımı ilginç bir arayüz yapmak için ateş açmaz, bu yüzden elle yapmak oldukça iştir. Özel bir alan arayüzü oluşturmak için birkaç seçeneği incelemenizi öneririz:
Üçüncü Party Eklentileri İlginç bir özel alan arayüzü oluşturmak için birkaç eklenti vardır. Önerdiğimiz ikisi POD (https://wordpress.org/plugins/pods/) ve gelişmiş özel alanlardır (https://wordpress.org/plugins/advanced-custom-pields/). Bu birçok ihtiyaç için iyi bir seçim olabilir. Özel alan eklentilerinden daha fazla kontrol için WordPress projeleri için metabox ve özel alanlar, https://wordpress.org/plugins/cmb2/ adresinden CMB2'yi öneririz. Proje dosyasını yükledikten sonra, kaydettiği özel etkinliğe büyük bir yapılandırma dizisine devam edersiniz. Bu, çekici bir özel alan arayüzünün yapımını büyük ölçüde basitleştirir. Elle, bir nedenden dolayı, bir veya daha fazla özel alan için sıfırdan bir kullanıcı arayüzü yapmanız gerekiyorsa, bu konudaki en sevdiğimiz öğretici Justin Tadlock, http://wp.satingmagazine.com/2011/10 /04 /Custom-Post-Meta-Boxes-WordPress /. WordPress özel alanının özel bir alanda gücünü anlamak, bir makale yayın makinesi olarak varsayılan rolü aracılığıyla WordPress'i genişletmenin önemli bir yoludur. Artık özel alanların doğasını nihai seviye verileri için anahtar depolama/değer olarak anlamanız ve özel alan verilerinin nasıl depolanacağını, değiştirileceğini ve nasıl erişileceğini anlamanız gerekiyor.
Get_ (), update_ () ve delete_ () biliyorsanız, özel bir alan kullanmak için Limerick'in bir özeti tatlı olabilir. Şimdi, kullanıcı arayüzü oluşturmak için? Bu, deneyebileceğiniz veya tamamlamak için üçüncü taraf kodunu kullanabileceğiniz bir iştir.
Sınav zamanı!
Çoğu durumda, gönderilere özel alan verileri eklemek için en iyi işlevler şunlardır:
update_post_meta ()
get_post_meta ()
get_post_meta () her zaman gerekir:
Hedeflenen Anahtar için Kimlik Sevkiyatı Aranacak ve alınacak değer
Get_post_meta () ‘nın üçüncü argümanını ortadan kaldırmak veya yanlış olarak ayarlamak, üreterek:
Özel saha verileri çıktı için temizlenmez
Hedeflenen gönderi için hedeflenen özel alan yoksa hata
Özel saha verileri, bir ip olarak değil, bir satır olarak devam ediyor
Cevaplar ve Açıklamalar
A. add_post_meta () Garip bir şekilde savunma özel alan zaten yayınlanması için mevcutsa.update_post_meta () Doğal olarak davranın, yoksa özel alanlar ekleyin ve varsa yenilenin.
A. Bu kimlik ilk işlev argümanıdır.B (ikinci argüman) ortadan kaldırılırsa, işlev, yazı ile ilgili tüm özel alanlardan ilişkisel dizileri geri yükleyecektir.C, get_post_meta () çalışma şekli ile ilgili değildir.
C. Bu argümanı True olarak ayarlamak, tek bir özel alan değeri ile çalışmayı biraz daha rahat hale getirir.
Kredi görüntüsü: Johnrobertshepherd