อย่างที่ฉันบอกไปแล้วว่าฉันจะต้องเริ่มทำงานกับความต้องการนี้ในทันทีเพื่อที่ฉันจะได้ก้าวหน้า เนื่องจากฉันล้มลงฉันคิดว่ามันเป็นการดีที่สุดที่จะเริ่มโพสต์พวกเขา ถึงกระนั้นหากมีคนอื่นสามารถ / จะโพสต์ (บางส่วน) ส่วนที่ฉันยังไม่ได้ทำฉันยินดีที่จะให้คุณคัดลอกสิ่งที่ฉันได้ทำไปแล้วและเลือกคำตอบของคุณเป็นคำตอบที่ดีที่สุด ก่อนหน้านั้นฉันจะเริ่มโพสต์โค้ด
สิ่งแรก: รวมwp-load.php
:
เนื่องจากเรากำลังสร้างไฟล์แบบสแตนด์อโลนในรูทของเว็บไซต์เพื่อเรียกใช้การเริ่มต้นที่จะใช้เฉพาะกับ "bootstrap" ไซต์(ฉันเรียกว่าเหมือง/my-init.php
)เราเริ่มต้นด้วยการรวม/wp-load.php
ฟังก์ชั่น WordPress API:
<?php
include "wp-load.php";
การสร้างผู้ใช้สำหรับไซต์
เราจะใช้wp_insert_user()
ฟังก์ชั่นที่อยู่ใน/wp-includes/registration.php
การสร้างผู้ใช้ของเรา require_once()
ไฟล์นี้จะไม่ได้โหลดโดยปริยายดังนั้นเราจะต้องโหลดตัวเองด้วยการเรียกร้องให้
นอกจากนี้เรายังจะใช้get_user_by()
ฟังก์ชั่นเพื่อดูว่าผู้ใช้ถูกสร้างขึ้นแล้วหรือไม่ ไม่จำเป็นต้องเรียกใช้รหัสสองครั้งหากไม่ได้ หมายเหตุ:นี่คือรูปแบบที่จะตามมา เช่นสคริปต์ของเราไม่ควรทำซ้ำหรือเขียนทับอะไรถ้าเรียกหลายครั้งโดยเฉพาะอย่างยิ่งหลังจากผู้ใช้เพิ่มหรือเปลี่ยนแปลงข้อมูลสำหรับรายการใด ๆ ที่เราวางแผนที่จะเริ่มต้น
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"
หากต้องการลบปลั๊กอิน"Hello Dolly" ( ขออภัย Matt )เราจะใช้delete_plugins()
ฟังก์ชันนี้ delete_plugins()
ต้องการอาร์เรย์ของพา ธ ไฟล์ที่สัมพันธ์กับ/wp-content/includes/
ไดเรกทอรี สำหรับปลั๊กอินสวัสดีดอลลี่เส้นทางไฟล์เป็นเพียงhello.php
เพราะปลั๊กอินสวัสดีดอลลี่ไม่ได้เก็บไว้ในไดเรกทอรีของตัวเอง แต่สำหรับปลั๊กอินส่วนใหญ่มันจะอยู่ในรูปแบบของ{$subdir}\{$filename}.php
; คือเส้นทางของไฟล์สำหรับ Akismet akismet/akismet.php
เป็น
อย่างไรก็ตามdelete_plugins()
ไม่สามารถใช้งานได้จนกว่าเราจะรวมไว้/wp-admin/includes/plugin.php
และยังมีการพึ่งพาwp-admin/includes/file.php
ดังนั้นเราrequire_once()
ทั้งคู่จึงเรียกก่อนหน้าdelete_plugins()
นี้ ในที่สุดเราใช้WP_PLUGIN_DIR
ค่าคงที่รวมกับ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()
จะล้มเหลวเนื่องจากการอนุญาตของไฟล์หรืออาจมีการเปิดใช้งานปลั๊กอินหรือเหตุผลอื่น ๆ ที่คุณจะต้องแก้ไขก่อน แต่สำหรับกรณีการใช้งานของเราHello Dollyหายไปโดยไม่มีการต่อสู้
ดาวน์โหลดติดตั้งและเปิดใช้งาน Repository ปลั๊กอิน
ฉันไม่จำเป็นต้องดาวน์โหลดปลั๊กอินจากแหล่งเก็บข้อมูลในตอนนี้(ฉันคิดว่ามันคงจะดีถ้ามี)เราจะปล่อยสไลด์ความต้องการนี้แล้วกลับมาดูอีกครั้งในภายหลัง
เปิดใช้งานปลั๊กอินของคุณ
ถัดไปกำลังเปิดใช้งานปลั๊กอินที่กำหนดเองของเราเอง เรากำลังสมมติว่าเราอัปโหลดไปยังไดเรกทอรีปลั๊กอินแล้วและทั้งหมดที่เราต้องทำเพื่อเปิดใช้งานพวกเขาสำหรับ WordPress ( หมายเหตุ : เทคนิคนี้จะใช้งานได้กับการเปิดใช้งานปลั๊กอินพื้นที่เก็บข้อมูลด้วยเช่นกันมันจะไม่ดาวน์โหลดและติดตั้งก่อน)
เราจะใช้activate_plugin()
ฟังก์ชั่นที่delete_plugins()
ต้องการ/wp-admin/includes/plugin.php
รวมไว้ แต่ไม่จำเป็น/wp-admin/includes/file.php
ในกรณีที่คุณต้องการเปิดใช้งานโดยอัตโนมัติเท่านั้นและไม่ลบ
เราจะทดสอบการมีอยู่อีกครั้ง(ไม่จำเป็นต้องเปิดใช้งานหากไม่ได้มีใช่มั้ย)และเราจะตรวจสอบโดยใช้is_plugin_active()
ฟังก์ชั่นที่ปลั๊กอินยังไม่ได้เปิดใช้งาน หมายเหตุฉันใช้ตัวแปรสองสามครั้งคราวนี้ ( $plugin_filepath
และ$plugin_dir
) เพื่อป้องกันการทำซ้ำตัวระบุปลั๊กอินหลายครั้ง
ตัวอย่างของเราที่ตามมาเปิดใช้งานปลั๊กอินmy-custom-plugin.php
ที่อยู่ใน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);
เปิดใช้งานธีมที่คุณต้องการ
การเปิดใช้งานชุดรูปแบบนั้นง่ายกว่าการลบหรือเปิดใช้งานปลั๊กอินค่อนข้างพูด switch_theme()
เรียกฟังก์ชันหนึ่งคือทั้งหมดที่จำเป็นต้องใช้: switch_theme()
ฟังก์ชั่นรับสอง(2)พารามิเตอร์แม่แบบและสไตล์ชีท อย่างน้อยนั่นคือสิ่งที่พารามิเตอร์ตั้งชื่อ คุณอาจคุ้นเคยกับคำว่าTheme ParentและChild Themeมากกว่า
สมมติว่าคุณได้สร้างธีมลูกด้วยธีม TwentyTen เริ่มต้นที่มาพร้อมกับ WordPress เป็นธีมหลักและคุณเรียกมันว่า"ธีมที่กำหนดเองของฉัน"และวางลงใน/wp-content/themes/my-custom-theme
ไดเรกทอรีคุณจะเปิดใช้งานธีมของคุณโดยใช้สายนี้:
switch_theme('twentyten', 'my-custom-theme');
แต่ถ้ามันไม่ใช่ธีมลูกล่ะ? ง่ายมากเพียงส่งไดเรกทอรีตัวระบุ / ชุดรูปแบบ (เช่นชื่อของไดเรกทอรีย่อย/wp-content/themes
ที่มีชุดรูปแบบของคุณ)เป็นพารามิเตอร์ทั้งสอง สมมติว่าคุณต้องการเปิดใช้งานชุดรูปแบบเฉพาะเรื่องโดยIan D Stewart ที่คุณเรียกswitch_theme()
เช่น:
switch_theme('thematic', 'thematic');
โดยส่วนตัวฉันคิดว่ามันค่อนข้างแปลกที่ต้องติดตามรายละเอียดทั้งสองที่นี่ดังนั้นฉันจึงเขียนฟังก์ชั่นที่เรียกactivate_my_theme()
ว่าการตรวจสอบครั้งแรกเพื่อให้แน่ใจว่าget_current_theme()
ฟังก์ชั่นและถ้าไม่เปิดใช้งาน คุณต้องบอกธีมลูก(หรือที่เรียกว่า "สไตล์ชีท")และมันจะอธิบายธีมหลักสำหรับคุณ(หรือที่รู้จักว่า "เทมเพลต")โดยการจับรายละเอียดจากget_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']
);
}
}
หนึ่งจุดสำคัญที่จะตระหนักถึง ; get_theme()
คาดว่าฟังก์ชั่นที่จะผ่านชื่อของธีมเด็กที่ไม่ได้เป็นของกระสุน / directory ระบุธีม (ชื่อมาจากส่วน "ชื่อธีม:" ในส่วนหัวของstyle.css
ไฟล์ของธีมโชคดีที่get_current_theme()
ฟังก์ชั่นส่งคืนชื่อด้วย)
ตรวจสอบส่วนหัวในstyle.css
ไฟล์ของธีมเริ่มต้น WordPress ยี่สิบยี่สิบที่เราเห็นชื่อเป็นจริง'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
*/
การลบโพสต์"Hello World"
ต่อไปเราต้องการลบโพสต์"Hello World" คุณอาจเห็นว่า@Rarstแสดงให้เราเห็นถึงวิธีการใช้wp_delete_post()
ฟังก์ชั่นซึ่งเป็นสิ่งที่เราต้องการ $post->ID
ในขณะที่เขาอธิบายพารามิเตอร์ที่สองพร้อมจะลบโพสต์เมื่อเทียบกับการย้ายไปยังถังขยะและพารามิเตอร์แรกคือ
แน่นอนว่ามันจะเป็นการดีที่จะสามารถระบุกระสุนแทนกระสุนได้$post->ID
และดังนั้นฉันจึงตัดสินใจหาวิธีที่จะทำเช่นนั้น หลังจากที่บาง spelunking ฉันพบว่า WordPress มีฟังก์ชั่นการตั้งชื่อที่น่าเสียดายที่เรียกว่าget_page_by_path()
ที่จริงช่วยให้เราสามารถมองขึ้นไปประเภทโพสต์ใด ๆ โดยกระสุนของมัน(มันเป็นชื่อที่น่าเสียดายเพราะคุณอาจจะมองข้ามมันเมื่อพยายามที่จะหาสิ่งที่ทำงานร่วมกับประเภทโพสต์อื่นที่ไม่ใช่'page'
.)
เมื่อเราผ่าน get_page_by_path()
ค่าคงที่ที่กำหนดโดย WordPress OBJECT
มันจะกลับมาให้เราโพสต์ในรูปแบบของโพสต์วัตถุ สำหรับพารามิเตอร์ที่สามเราผ่านเพื่อแสดงให้เห็นว่าเราอยากให้มันค้นหาประเภทของการโพสต์'post'
'post'
เนื่องจากget_page_by_path()
จะส่งคืนออบเจกต์โพสต์ที่เราต้องการหรือส่งคืนnull
หากไม่มีโพสต์ที่ตรงกับทากที่เราสามารถตรวจสอบการมีอยู่และทำการค้นหาในเวลาเดียวกัน:
$post = get_page_by_path('hello-world',OBJECT,'post');
if ($post)
wp_delete_post($post->ID,true);
หมายเหตุ:เราสามารถเรียกใช้รหัสเพื่อลบทุกโพสต์ในฐานข้อมูล แต่ถ้าเรามีเราจะไม่สามารถเรียกใช้รหัสนี้ได้อีกเมื่อเราเพิ่มโพสต์ที่เราต้องการเก็บไว้และนั่นเป็นหนึ่งในข้อ จำกัด การออกแบบของเรา
ต่อไป...
ฉันจะเพิ่มสิ่งนี้ต่อไปเรื่อย ๆ จนกว่าฉันจะทำเสร็จหรือจนกว่าจะมีคนช่วยเหลือ
Create Menus for Custom Pages
ไหม? คุณหมายถึงพื้นที่เมนูส่วนบุคคลในบางหน้าหรืออะไร