Bahsettiğim gibi , bu ihtiyaç üzerinde hemen çalışmaya başlayacağım, bu yüzden yoluma gidiyorum. Bunları yıktığım için onları göndermeye başlamanın en iyisi olduğunu düşündüm. Yine de, başkası yapmadığım parçaları yayınlayabiliyorsa (bazılarını) yayınlayabiliyorsa / gönderirse / gönderirseniz, yapacağım her şeyi kopyalamanıza izin vermekten memnuniyet duyarım ve cevabınızı en iyi cevap olarak seçin. O zamana kadar kodu göndermeye başlayacağım.
İlk Şey: Dahil Et wp-load.php
:
Web sitemizin kökünde bağımsız bir dosya oluşturduğumuzdan, başlatmayı çalıştırmak için yalnızca bir siteyi "önyüklemek" için kullanılacak (benim/my-init.php
adımı verdim )/wp-load.php
, WordPress API işlevlerini yüklemek için ekleyerek başlıyoruz :
<?php
include "wp-load.php";
Site İçin Kullanıcı Oluşturma
Kullanıcılarımızı oluşturmak için wp_insert_user()
bulunan işlevi kullanacağız /wp-includes/registration.php
. Bu dosya varsayılan olarak yüklenmedi, bu yüzden bir çağrı ile kendimizi yüklememiz gerekecek require_once()
.
get_user_by()
Fonksiyonu, daha önce kullanıcının oluşturulduğunu görmek için de kullanırız ; Gerekmediyse kodu iki kez çalıştırmanıza gerek yoktur. Not: Bu bir kalıp izleyecektir; Örneğin, betiğimiz, özellikle kullanıcılar başlatmayı planladığımız öğelerden herhangi birine veri ekledikten veya değiştirdikten sonra, birden çok kez çağrıldığında hiçbir şeyi çoğaltmamalı veya üzerine yazmamalıdır.
require_once( ABSPATH . WPINC . '/registration.php');
$user = get_user_by('slug','johnsmith');
if (!is_object($user)) {
wp_insert_user(array(
'user_login' => 'johnsmith',
'role' => 'administrator',
'user_email' => 'johnsmith@example.com',
'user_url' => 'http://example.com',
'first_name' => 'John',
'last_name' => 'Smith',
'comment_shortcuts' => '',
'use_ssl' => '0',
'user_pass' => '12345',
));
}
"Hello Dolly" Eklentisini Silme
"Hello Dolly" eklentisini silmek için ( üzgünüm Matt )delete_plugins()
fonksiyonu kullanacağız . dizine delete_plugins()
göre bir dosya yolu dizisi bekler /wp-content/includes/
. İçin Hello Dolly dosya yolu eklentisi basitçe hello.php
beri Hello Dolly eklentisi, bu kendi dizinde saklanmaz ama çoğu eklentileri için o şeklinde olacak {$subdir}\{$filename}.php
; yani Akışmet'in dosya yolu akismet/akismet.php
.
Ancak, delete_plugins()
biz dahil ettik kadar mevcut değildir /wp-admin/includes/plugin.php
ve bir bağımlılık ile de orada wp-admin/includes/file.php
böylece require_once()
dediğimiz olanların hem önce delete_plugins()
. Sonunda ana eklenti dosyasının silinmeye çalışılmadan önce var olup olmadığını görmek için WP_PLUGIN_DIR
birleştirilmiş bir sabit kullanıyoruz (eksik bir dosyayı silmeye çalışmamızın önemi yoktur, ancak ilk önce gerçekten kontrol etmek daha zordur ve bunun nasıl yapılacağını bilmek gerekebilir. başka bir nedenden dolayı) :file_exists()
require_once(ABSPATH . 'wp-admin/includes/plugin.php');
require_once(ABSPATH . 'wp-admin/includes/file.php');
if (file_exists(WP_PLUGIN_DIR . '/hello.php'))
delete_plugins(array('hello.php'));
delete_plugins()
Dosya izinleri veya belki de bir eklentinin şu anda aktif olması veya ilk önce çözmeniz gereken başka bir nedenden ötürü bazen başarısız olacağına dikkat edin , ancak kullanım durumumuz için Hello Dolly bir mücadele etmeden ortadan kalkar.
Depo Eklentilerini İndirme, Kurma ve Etkinleştirme
Aslında şu anda depodan eklentileri indirmeye ihtiyacım yok (sadece güzel olacağını düşünmüştüm) , bu gereksinimin kaymasına ve daha sonra tekrar ziyaret etmesine izin vereceğiz.
Eklentileri Etkinleştirme
Ardından kendi özel eklentilerimizi etkinleştiriyoruz. Onları zaten eklenti dizinine yüklediğimizi ve WordPress için onları etkinleştirmek için tek yapmamız gereken varsayılıyor . ( Not : Bu teknik, depo eklentilerini etkinleştirmek için de çalışacaktır, önce bunları indirmeyecek ve kurmayacaktır.)
Dahil olmayı gerektiren ancak yalnızca etkinleştirmeyi otomatikleştirmeniz ve silmeyi gerektirmeniz gerekmiyorsa gerekmeyen activate_plugin()
işlevi kullanacağız .delete_plugins()
/wp-admin/includes/plugin.php
/wp-admin/includes/file.php
Varlığı tekrar test edeceğiz (eğer orada değilse etkinleştirmeniz gerekmiyor, eh?) Ve ayrıca is_plugin_active()
eklentinin henüz etkinleştirilmemiş olduğu fonksiyonu kullanarak da doğrulayacağız . Not Bu sefer ( $plugin_filepath
ve $plugin_dir
) eklenti tanımlayıcısının birçok kez çoğaltılmasını önlemek için birkaç değişken kullandım .
Aşağıdaki örnekte alt dizinde my-custom-plugin.php
bulunan eklentiyi etkinleştiriyoruz my-custom-plugin
:
require_once(ABSPATH . 'wp-admin/includes/plugin.php');
$plugin_filepath = 'my-custom-plugin/my-custom-plugin.php';
$plugin_dir = WP_PLUGIN_DIR . "/{$plugin_filepath}";
if (file_exists($plugin_dir) && !is_plugin_active($plugin_filepath))
activate_plugin($plugin_filepath);
Tercih Edilen Temanızı Etkinleştirme
Bir temayı etkinleştirmek, bir eklentiyi silmek veya etkinleştirmek, karşılaştırmalı olarak konuşmaktan biraz daha kolaydır; bir işlev çağrısı yapılması gereken tek şey ise: switch_theme()
. switch_theme()
İşlevi, iki kabul eder (2) : parametreler şablonu ve stil . En azından parametrelerin ismi bu. Ebeveyn Teması ve Çocuk Teması terimlerini daha iyi biliyor olabilirsiniz .
WordPress'in Ana Tema olarak geldiği varsayılan TwentyTen temasına sahip bir Çocuk Teması oluşturduğunuzu ve onu "Özel Temam " olarak adlandırıp dizine yerleştirdiğinizi varsayarsak , bu çağrıyı kullanarak temanızı etkinleştirirsiniz:/wp-content/themes/my-custom-theme
switch_theme('twentyten', 'my-custom-theme');
Ama ya bir çocuk teması değilse? Bu kolay, sadece slug / tema tanımlayıcısını (yani /wp-content/themes
temanızı içeren alt dizinin adını ) her iki parametre olarak iletin. Tematik temayı aktive etmek istediğinizi varsayarsak , Ian D Stewart şöyle çağırır switch_theme()
:
switch_theme('thematic', 'thematic');
Şahsen, burada her iki ayrıntıyı da takip etmek zorunda kalmamın biraz zor olduğunu düşünüyorum, bu yüzden işlevi activate_my_theme()
kontrol etmek için ilk kontrolleri yapan get_current_theme()
ve onu etkinleştirmeyenler varsa denilen bir işlev yazdım . Sadece alt temayı (yani "stil sayfası") söylemeniz gerekir ve işlevden ayrıntıları alarak sizin için ana temayı ("şablon") belirlerget_theme()
.
activate_my_theme('My Current Theme');
function activate_my_theme($theme_name) {
if ($theme_name!=get_current_theme()) {
$theme = get_theme($theme_name);
switch_theme(
$theme['Template'],
$theme['Stylesheet']
);
}
}
Dikkat edilmesi gereken bir anahtar nokta ; get_theme()
fonksiyon beklediği Geçilecek adını Çocuk Teması ait DEĞİL 's dizin sümüklüböcek / tema tanımlayıcı. (Ad, tema style.css
dosyasının başlığındaki "Tema Adı:" bölümünden gelir . Neyse ki, get_current_theme()
işlev de adı döndürür.)
style.css
WordPress varsayılan teması dosyasındaki başlığı inceleyen Twenty Ten ismini görüyoruz aslında 'Twenty Ten'
:
/*
Theme Name: Twenty Ten
Theme URI: http://wordpress.org/
Description: The 2010 theme for WordPress is stylish, customizable, simple, and readable -- make it yours with a custom menu, header image, and background. Twenty Ten supports six widgetized areas (two in the sidebar, four in the footer) and featured images (thumbnails for gallery posts and custom header images for posts and pages). It includes stylesheets for print and the admin Visual Editor, special styles for posts in the "Asides" and "Gallery" categories, and has an optional one-column page template that removes the sidebar.
Author: the WordPress team
Version: 1.1
Tags: black, blue, white, two-columns, fixed-width, custom-header, custom-background, threaded-comments, sticky-post, translation-ready, microformats, rtl-language-support, editor-style
*/
Silme "Merhaba Dünya" Yayınla
Ardından "Merhaba Dünya" yayınını silmek istiyoruz . @Rarst'ın bize wp_delete_post()
tam olarak ihtiyacımız olan işlevi nasıl kullanacağımızı gösterdiğini görmüş olabilirsiniz . Açıkladığı gibi, ikinci parametre postu çöp kutusuna taşımak yerine tamamen siler ve ilk parametre olandır $post->ID
.
Elbette bunun yerine sümüklü böcek belirtmek güzel olurdu $post->ID
ve bunun için bir yol bulmaya karar verdim. Bazı hecelemelerden sonra WordPress'in adlandırılmış bir fonksiyona sahip olduğunu ve get_page_by_path()
bunun aslında herhangi bir yazı tipini sümüklü suyla aramamıza izin verdiğini öğrendim (ne yazık ki, çünkü yazı tipleri ile çalışan bir şey bulmaya çalışırken göz ardı edebilirsiniz 'page'
.)
get_page_by_path()
WordPress tanımlı sabiti geçtiğimizden bu yana OBJECT
bize post nesne biçiminde bir yazı döndürecektir. Üçüncü parametre 'post'
için şunu yazdık: Bunun için yazı tiplerine bakmak istedik 'post'
. Yana get_page_by_path()
yayınlayamıyorlar gerekmez nesne veya dönüşünü dönecektir null
hiçbir sonrası sümüklüböcek eşleşirse biz varlığı için kontrol ve aynı zamanda bir arama yapabilirsiniz:
$post = get_page_by_path('hello-world',OBJECT,'post');
if ($post)
wp_delete_post($post->ID,true);
Not: Veritabanındaki her gönderiyi silmek için kod çalıştırabiliriz, ancak elimizde tutmak istediğimiz gönderileri ekledikten sonra bu kodu tekrar çalıştıramazdık ve tasarım kısıtlamalarımızdan biriydi.
Sonraki...
Bunu bitirene kadar ya da başkası yardım edene kadar anlamaya devam edeceğim.
Create Menus for Custom Pages
musun? Bazı sayfalardaki münferit menü alanlarını mı kastediyorsunuz?