PHP Kullanarak WordPress Yazıları ve Sayfaları Oluşturun – A 101 Eğitimi


Hiç şüphe yok ki, onları kurduğunuzda sizin için otomatik olarak 'sahte veri' yüklediğini iddia eden WordPress Temaları ve Eklentileri görmüşsünüzdür, böylece anında tam olarak işleyen bir web siteniz olur. Bunu sadece PHP fonksiyonlarını kullanarak başarmanın bir yöntemini göstereceğim.

Bu, aşağıdaki durumlarda yararlı olabilir:

  • Temanız veya eklentiniz belirli gönderiler veya sayfalar gerektiriyor.
  • Yukarıda açıklandığı gibi premium bir kukla kurulum sağlamak istiyorsunuz.
  • Gönderi oluşturmayı otomatikleştirmek istiyorsunuz.
  • Sadece öğrenmek istiyorsun.

Bu öğreticide, 'hızlı ve kirli' bir çalışma çözümü elde etmek için basit bir başlangıç ​​işlevi oluşturacağız. Daha sonra farklı bir eğitimde, sağlam ve kullanımı kolay bir gönderi sistemi oluşturmak için burada öğrendiklerimizi nasıl genişleteceğimizi öğreneceğiz.

Tüm nasıl yapılır'ı okumak yerine önceden var olan kodla oynamayı tercih edenler için, kullanım örneği ve notları ile birlikte son işlevimiz burada.

 if ( ! function_exists( 'PostCreator' ) ) { function PostCreator( $name = 'AUTO POST', $type = 'post', $content = 'DUMMY CONTENT', $category = array(1,2), $template = NULL, $author_id = '1', $status = 'publish' ) { define( POST_NAME, $name ); define( POST_TYPE, $type ); define( POST_CONTENT, $content ); define( POST_CATEGORY, $category ); define( POST_TEMPLATE, '' ); define( POST_AUTH_ID, $author_id ); define( POST_STATUS, $status ); if ( $type == 'page' ) { $post = get_page_by_title( POST_NAME, 'OBJECT', $type ); $post_id = $post->ID; $post_data = get_page( $post_id ); define( POST_TEMPLATE, $template ); } else { $post = get_page_by_title( POST_NAME, 'OBJECT', $type ); $post_id = $post->ID; $post_data = get_post( $post_id ); } function hbt_create_post() { $post_data = array( 'post_title' => wp_strip_all_tags( POST_NAME ), 'post_content' => POST_CONTENT, 'post_status' => POST_STATUS, 'post_type' => POST_TYPE, 'post_author' => POST_AUTH_ID, 'post_category' => POST_CATEGORY, 'page_template' => POST_TEMPLATE ); wp_insert_post( $post_data, $error_obj ); } if ( ! isset( $post ) ) { add_action( 'admin_init', 'hbt_create_post' ); return $error_obj; } } } /* All available options for PostCreator() PostCreator( 'TITLE' , 'POST TYPE' , 'POST CONTENT' , 'POST CATEGORY' , 'TEMPLATE FILE NAME' , 'AUTHOR ID NUMBER' , 'POST STATUS'); TITLE - HTML Stripped Out. Simple String. POST TYPE - Post type slug. Eg 'post' or 'page'. Custom Post Types are supported. POST CONTENT - Content of the Post/Page. HTML allowed. POST CATEGORY - An array of the integer ID's of the category/categories you want to link to your post TEMPLATE FILE NAME - File name of the template. Only for Pages. In the format 'file_name.php'. AUTHOR ID NUMBER - Integer value. Default is 1. POST STATUS - Available options; [ 'draft' | 'publish' | 'pending'| 'future' | 'private' | custom registered status ] If successful, PostCreator() returns nothing. If there is an error PostCreator() returns a WP_error object. */ PostCreator( 'My Lorem Ipsum', 'page', 'With a sizable serving of Dolor. This was created using Harri Bell-Thomas\'s PostCreator function.' );

Adım adım rehber

PostCreator() adında bir PHP işlevi oluşturacağız ve belirli parametreleri almak için buna ihtiyacımız olacak. Her parametreye bir varsayılan verilmiştir, bu yüzden teknik olarak işlevi çağırırken hiçbirini belirtmeniz gerekmez, ama hey, eğlence bunun neresinde?

 function PostCreator( $name = 'AUTO POST', $type = 'post', $content = 'DUMMY CONTENT', $category = array(1,2), $template = NULL, $author_id = '1', $status = 'publish' ) { // function output here }

Daha sonra, aşağıdaki gömülü işlev için gerekli olan bazı sabitleri tanımlayacağım. (Bu, sabitleri kullanmamak için yeniden yazılabilir, ancak bunları temel PostCreator() işlevini genişletirken yararlı bulduğum için kullandım, ancak bu başka bir öğretici için bir hikaye.

 define( POST_NAME, $name ); define( POST_TYPE, $type ); define( POST_CONTENT, $content ); define( POST_CATEGORY, $category ); define( POST_TEMPLATE, '' ); define( POST_AUTH_ID, $author_id ); define( POST_STATUS, $status );

Tamam, şimdiye kadar çok iyi. Şimdi, yinelenen gönderilerin/sayfaların oluşturulmasını önlemek için bazı doğrulamalar ekledim (ki bu bir kabus, güven bana!). Bu doğrulama, aynı ada sahip bir yazı/sayfanın zaten var olup olmadığını kontrol eder. Olursa yenisini yaratmaz, yaratmazsa sizin için yaratır.

Gönderinin başlığını kontrol etmeyi seçmemin nedeni, WordPress tarafından bir sayfa oluşturmak için gereken tek şeyin bu olmasıdır (gerisi otomatik olarak oluşturulur). Bu doğrulamayı gerçekleştirmenin diğer yolları, 'sümüklü böcek' veya posta kimliklerine karşı kontrol etmeyi içerir. Bütün bunlara daha sonraki bir eğitimde geleceğiz.

Bu, özellikle yazı/sayfa eklentiniz veya temanız tarafından isteniyorsa kullanışlıdır. Bunu ilk önce eklentilerimden biri için geliştirdim çünkü belirli bir sayfa şablonuyla bir sayfanın bulunması gerekiyordu. Bu işlevle, PostCreator()'ın WordPress' 'admin_init' olmasını sağladım, yani biri onu silmeye çalışırsa (nasıl cüret ederler!), o zaman eklentinin geri kalanıyla ilgili sorunları önlemek için hemen yeniden oluşturulacaktı.

Kimsenin bloglarının ele geçirilmesini istemediğini unutmayın, bu yüzden onlara neler olduğunu açıkça anlattığınızdan emin olun ve belki de kapatmaları için bir seçenek sağlayın.

Şimdi doğrulamaya geri dönelim. İşte bir sonraki kod parçası.

 if ( $type == 'page' ) { $post = get_page_by_title( POST_NAME, 'OBJECT', $type ); $post_id = $post->ID; $post_data = get_page( $post_id ); define( POST_TEMPLATE, $template ); } else { $post = get_page_by_title( POST_NAME, 'OBJECT', $type ); $post_id = $post->ID; $post_data = get_post( $post_id ); }

Peki burada neler oluyor?

Eh, bu aslında iki kez tekrarlanan aynı işlemdir. Bunu, gönderilere ve sayfalara biraz farklı davranıldığı için yapıyorum. Ayrıca, POST_TEMPLATE sabiti yalnızca bir sayfa oluşturmaya çalışıyorsanız tanımlanır, çünkü yalnızca sayfalar bu parametreyi kabul edebilir (yani, standart bir gönderi oluşturmaya çalışıyorsanız yoksayılır).

IF yan tümcesinin ilk satırında (önceden bilmiyorsanız teknik adı 'apodosis'tir) $post değişkeni tanımlanır. Oluşturulmaya çalışılanla aynı ada sahip bir gönderi/sayfa varsa, mevcut girişin verileriyle $post doldurulur (bir nesne olarak, bir dizi olarak değil, ancak bu kesinlikle gerekliyse değiştirilebilir). Bu değişken, başlığınızın benzersiz olup olmadığını test etmek için kullanılır. Sonraki iki satırı ekledim çünkü bu işlevi genişletmek istiyorsanız yine çok kullanışlılar. Buna bir örnek, zaten varsa, mevcut gönderiyi güncellemek olabilir.

Sırada, 'admin_head' kancasına eklenecek olan iç içe işlevimiz var. İşte burada;

 function hbt_create_post() { $post_data = array( 'post_title' => wp_strip_all_tags( POST_NAME ), 'post_content' => POST_CONTENT, 'post_status' => POST_STATUS, 'post_type' => POST_TYPE, 'post_author' => POST_AUTH_ID, 'post_category' => POST_CATEGORY, 'page_template' => POST_TEMPLATE ); wp_insert_post( $post_data, $error_obj ); }

Basitçe, bu, yazımızı/sayfamızı oluşturmak için WordPress'in yerleşik işlevini (wp_insert_post) kullanıyor. $post_data'yı bir dizi parametremizle doldururuz (sabitlerimizi burada kullanımda görebilirsiniz). Bu oluşturulur ve bir hata varsa, bir boole değeri $error_obj üretir. DOĞRU = Bir sorun. YANLIŞ = Her şey yolunda. Yapılacak son şey, yönetici kafasında önceki işlevi çalıştırmaktır, ancak yalnızca doğrulamayı geçerse ve hata nesnesini döndürür.

 if ( ! isset( $post ) ) { add_action( 'admin_init', 'hbt_create_post' ); return $error_obj; }

Harika! Şimdi harika fonksiyonumuzu yarattık, hadi kullanalım!

kullanım

Basitçe PostCreator() işlevini ekleyin ve çalıştırın.

Bu, varsayılan değerler kullanılarak çalışacaktır, peki ya özelleştirilebilirlik istiyorsak? Ardından parametrelerimizi kullanıyoruz.

 PostCreator( 'TITLE', 'POST TYPE', 'POST CONTENT', 'POST CATEGORY', 'TEMPLATE FILE NAME', 'AUTHOR ID NUMBER', 'POST STATUS' );

Tüm bu seçeneklerle birlikte kesme işareti kullanmaya özen gösterin. Kesme işareti kullanmak istiyorsanız (parametrelerin kendilerini çevreleyenler hariç) önüne eğik çizgi eklediğinizden emin olun. Örneğin;

 PostCreator( 'Alex\'s Post' );

TITLE Parametresi bir dize değeri kabul eder. Bu, HTML etiketlerinden arındırılmıştır.

POST TYPE Parametresi, gönderi türünün bilgisini kabul eder, örneğin; 'posta' veya 'sayfa'. Özel Gönderi Türleri desteklenir.

 PostCreator( 'Alex\'s Post', 'page' );

POST CONTENT', bir dize değeri kabul eder. Bu, oluşturulan yazının/sayfanın içeriği olacaktır. Burada HTML'ye izin verilir.

 PostCreator( 'Alex\'s Post', 'page', 'The force is strong with this one…' );

POST CATEGORY, bir dizi tamsayı kabul eder. Tam sayılar, gönderiye/sayfaya atfedilen kategori/kategorilerin kimliğine karşılık gelir.

 PostCreator( 'Alex\'s Post', 'page' , 'The force is strong with this one…' , array( 1, 2 ) );

ŞABLON DOSYA ADI, yeni sayfanızın istenen sayfa şablonunu tanımlayan bir dize değeridir. Bu yalnızca sayfalar için çalışır. Format şu şekilde olacaktır; 'dosya_adı.php'.

 PostCreator( 'Alex\'s Post', page', 'The force is strong with this one…', array( 1, 2 ) , 'fullwidth_page.php' );

YAZAR KİMLİK NUMARASI, yazarın kimliğinin tamsayı değeridir.

 PostCreator( 'Alex\'s Post', 'page', 'The force is strong with this one…', array( 1, 2 ) , 'fullwidth_page.php', '1' );

POST STATUS, oluşturulan gönderi/sayfanın durumunu tanımlamanıza izin verir. Varsayılan olarak 'yayınlanmıştır'.

Mevcut seçenekler; [ 'taslak' | 'yayınla' | 'beklemede'| 'gelecek' | 'özel' | özel kayıtlı durum ]

 PostCreator( 'Alex\'s Post', 'page', 'The force is strong with this one…', array( 1, 2 ) , 'fullwidth_page.php', '1', 'publish' );

Toplama

WordPress son derece güçlü bir araçtır, ancak zaman zaman kesinlikle asi olabilir. Umarım bu basit pasajı faydalı bulursunuz, belki de yol boyunca bir iki şey öğrenirsiniz. Bu makalede daha önce yaptığımız şeyleri bir PHP sınıfına dönüştüreceğim, daha fazla işlevsellik ve kararlılık ekleyeceğim bir sonraki yazı için bizi izlemeye devam edin. Ön izleme için Github'daki kodu inceleyin: PostController

Herhangi bir sorunuz varsa, aşağıdaki yorum bölümünde sormanız yeterlidir.

Copyright statement: Unless otherwise noted, this article is Collected from the Internet, please keep the source of the article when reprinting.

Check Also

Divi's Theme Builder ile Özel Global Başlık Nasıl Oluşturulur

Artık Tema Oluşturucu burada olduğuna göre, web sitenizi A'dan Z'ye kurmanıza yardımcı olacak yeni eğitimlere dalmak için sabırsızlanıyoruz. Buna Divi'nin yerleşik seçeneğini kullanarak özel başlıklar oluşturma da dahildir. Bu eğitimde Divi's Theme Builder'ı kullanarak global bir başlık oluşturmaya odaklanacağız. Bu sayfaya veya gönderiye farklı bir başlık atamadıysanız, web sitenizin her yerinde genel bir başlık görünecektir.

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir