วิธีเรียกใช้สคริปต์ Python ใน WordPress

เผยแพร่แล้ว: 2023-08-03

Python ได้รับความนิยมเพิ่มขึ้นอย่างต่อเนื่องเนื่องจากใช้งานง่าย ไลบรารีที่ทรงพลัง และไวยากรณ์ที่เรียบง่าย ฉันมักจะพบว่าตัวเองกำลังสร้างต้นแบบฟังก์ชันการทำงานแต่ละอย่างสำหรับ WordPress ด้วย Python ก่อนที่จะแปลงเป็น PHP

แต่แทนที่จะทำเช่นนั้น ทำไมไม่ลองรัน Python บน WordPress ล่ะ ในบทความนี้ เราจะพูดถึงวิธีการต่างๆ ที่สามารถใช้รันโค้ด Python บนเว็บไซต์ WordPress ได้โดยตรง

เรียกใช้สคริปต์ Python บน WordPress

เราสามารถใช้ฟังก์ชัน PHP ในตัวที่เรียกว่า exec() เพื่อเรียกใช้สคริปต์ภายนอก รวมถึงจาก Python การดำเนินการนี้จะต้องใช้โค้ดเล็กน้อยทั้งใน PHP และ Python เพื่อให้ทำงานได้ แต่จะค่อนข้างง่ายเมื่อคุณเข้าใจว่าทุกอย่างเข้ากันได้อย่างไร

david-clode-ojlt2xbwuws-unsplash-1

เราสามารถสร้างปลั๊กอินหรือข้อมูลโค้ดก็ได้ ขึ้นอยู่กับสิ่งที่คุณต้องการสร้าง แต่โดยทั่วไปแล้วฉันจะสร้างข้อมูลโค้ดซึ่งจัดการได้ง่ายกว่าในส่วนหน้าของเว็บไซต์

ขั้นแรก ตรวจสอบให้แน่ใจว่า Python ได้รับการติดตั้งทั่วโลกบนเซิร์ฟเวอร์ของคุณ คุณสามารถทำได้ด้วยตัวเองหากคุณมีสิทธิ์เข้าถึงรูท หากไม่มี คุณจะต้องขอให้เว็บโฮสต์ติดตั้ง ตัวอย่างเช่น บน Cloudways เราจำเป็นต้องให้พวกเขาติดตั้ง Python ให้เรา

ฟังก์ชั่น PHP

เราจะสร้างโค้ดเพื่อสร้างฟังก์ชัน PHP ที่จะเรียกใช้สคริปต์ Python ใน WordPress เพื่อความสะดวกในการใช้งาน ก่อนอื่นฉันจะแสดงข้อมูลโค้ดที่สามารถใช้กับปลั๊กอินการจัดการโค้ดข้อมูลโค้ดได้ จากนั้นเรามาดูการสร้างปลั๊กอินแบบกำหนดเองเพื่อทำสิ่งเดียวกัน

ด้วยฟังก์ชันนี้ สคริปต์ Python ทั้งหมดจะอยู่ในไลบรารีสื่อ และเราสามารถเลือกสคริปต์ที่จะเรียกใช้โดยระบุ ID รายการไลบรารีสื่อ โปรดทราบว่าคุณอาจต้องอนุญาตให้อัปโหลดประเภท Python mime ฉันใช้ปลั๊กอินนี้เพื่อเปิดใช้งาน

สิ่งนี้ดูซับซ้อนเล็กน้อยเพราะฉันลงเอยด้วยการเพิ่มการจัดการข้อผิดพลาดจำนวนมาก แต่โดยหลักแล้ว โค้ดทั้งหมดจะทำการค้นหาไฟล์จากไลบรารีสื่อ และเรียกใช้สคริปต์

โปรดทราบว่าฉันใช้ 'python3' เนื่องจากเป็นสิ่งที่ติดตั้งในเครื่องของฉัน คุณอาจต้องการเปลี่ยนเป็น 'python'

<?php ฟังก์ชัน cwpai_run_python_script($media_id) { // รับพาธไฟล์มีเดียบนเซิร์ฟเวอร์ $media_path = get_attached_file($media_id); // ตรวจสอบว่ามีไฟล์มีเดียอยู่หรือไม่ ถ้า ($media_path) { // ตั้งค่าคำสั่ง Python $python_command = 'python3' Escapeshellarg($media_path); // เรียกใช้สคริปต์ Python และจับเอาต์พุต exec($python_command, $output, $return_status); ถ้า ($return_status === 0) { // สคริปต์ดำเนินการสำเร็จ ให้ส่งคืนเอาต์พุต return implode("\n", $output); } อื่น { // การดำเนินการสคริปต์ล้มเหลว บันทึกข้อผิดพลาดและส่งคืนข้อความแสดงข้อผิดพลาด error_log('ข้อผิดพลาดในการเรียกใช้สคริปต์ Python คำสั่ง: ' . $python_command); ส่งคืน 'ข้อผิดพลาดในการเรียกใช้สคริปต์ Python'; } } else { // ไม่พบไฟล์มีเดีย บันทึกข้อผิดพลาดและส่งกลับข้อความแสดงข้อผิดพลาด error_log('Media file not found for media ID ' . $media_id); กลับ 'ไม่พบไฟล์มีเดีย'; } } // ตัวอย่างการใช้ ID สื่อ 6 $result = cwpai_run_python_script(6); // แสดงผลลัพธ์หรือจัดการข้อผิดพลาด if (is_string($result)) { // หากผลลัพธ์เป็นสตริง แสดงว่ามีข้อความแสดงข้อผิดพลาด echo $result; } else { // หากผลลัพธ์ไม่ใช่สตริง ควรเป็นเอาต์พุตของสคริปต์ Python // แสดงเอาต์พุตหรือดำเนินการประมวลผลเพิ่มเติมหากจำเป็น echo $result; }

หากเราสร้างปลั๊กอิน โครงสร้างอาจมีลักษณะดังนี้:

 wp-content/plugins/ cwpai_my-python-plugin/ cwpai_plugin.php assets/ py/ script.py

cwpai_plugin.php มีลักษณะดังนี้:

<?php /* ชื่อปลั๊กอิน: CWPAI My Python Plugin คำอธิบาย: ปลั๊กอินสำหรับเรียกใช้สคริปต์ Python สำหรับไฟล์มีเดีย เวอร์ชัน: 1.0 ผู้แต่ง: ชื่อของคุณ */ // รหัสปลั๊กอินจะอยู่ที่นี่ ฟังก์ชัน cwpai_run_python_script($file_name) { // รับเส้นทางไดเร็กทอรีของปลั๊กอิน $plugin_dir = plugin_dir_path(__FILE__); // กำหนดพาธของสคริปต์ Python ที่สัมพันธ์กับไดเร็กทอรีปลั๊กอิน $python_script_path = $plugin_dir 'สินทรัพย์/py/' . $file_name; // ตรวจสอบว่ามีไฟล์สคริปต์ Python อยู่หรือไม่ ถ้า (file_exists($python_script_path)) { // ตั้งค่าคำสั่ง Python $python_command = 'python3 ' Escapeshellarg($python_script_path); // เรียกใช้สคริปต์ Python และจับเอาต์พุต exec($python_command, $output, $return_status); ถ้า ($return_status === 0) { // สคริปต์ดำเนินการสำเร็จ ให้ส่งคืนเอาต์พุต return implode("\n", $output); } อื่น { // การดำเนินการสคริปต์ล้มเหลว บันทึกข้อผิดพลาดและส่งคืนข้อความแสดงข้อผิดพลาด error_log('ข้อผิดพลาดในการเรียกใช้สคริปต์ Python คำสั่ง: ' . $python_command); ส่งคืน 'ข้อผิดพลาดในการเรียกใช้สคริปต์ Python'; } } else { // ไม่พบไฟล์สคริปต์ Python บันทึกข้อผิดพลาดและส่งคืนข้อความแสดงข้อผิดพลาด error_log('Python script file not found: ' . $python_script_path); กลับ 'ไม่พบไฟล์สคริปต์ Python'; } }

สำหรับปลั๊กอิน การรวมสคริปต์ Python ไว้ในไดเร็กทอรีเฉพาะเจาะจงจะเร็วกว่า (ในตัวอย่างนี้คือ asset/py) ทำให้คุณเพิ่มและแก้ไขผ่าน FTP ได้ ดังนั้น จะเป็นการดีกว่าถ้าคุณมี Python ให้ทำงานใน WordPress จำนวนมาก

หากต้องการใช้งาน เพียงเรียกใช้ฟังก์ชัน:

// ตัวอย่างการใช้งานชื่อไฟล์ "example.py" $result = cwpai_run_python_script('example.py'); // แสดงผลลัพธ์หรือจัดการข้อผิดพลาด if (is_string($result)) { // หากผลลัพธ์เป็นสตริง แสดงว่ามีข้อความแสดงข้อผิดพลาด echo $result; } else { // หากผลลัพธ์ไม่ใช่สตริง ควรเป็นเอาต์พุตของสคริปต์ Python // แสดงเอาต์พุตหรือดำเนินการประมวลผลเพิ่มเติมหากจำเป็น echo $result; }

รหัสย่อ

ใน "การผลิต" การสร้างรหัสย่อ WP เพื่อเรียกใช้สคริปต์ Python อาจมีประโยชน์เช่นกัน เราสามารถใช้ฟังก์ชันทั่วไปเดียวกันจากด้านบน แก้ไขเพื่อทำให้เป็นรหัสย่อของ WordPress:

ฟังก์ชัน cwpai_run_python_script($atts) { // แยกคุณสมบัติรหัสย่อ $args = shortcode_atts(array('media_id' => '1'), $atts); // รับเส้นทางไฟล์มีเดียบนเซิร์ฟเวอร์ $media_path = get_attached_file($args['media_id']); // ตรวจสอบว่ามีไฟล์มีเดียอยู่หรือไม่ ถ้า ($media_path) { // ตั้งค่าคำสั่ง Python $python_command = 'python3' Escapeshellarg($media_path); // เรียกใช้สคริปต์ Python และจับเอาต์พุต exec($python_command, $output, $return_status); ถ้า ($return_status === 0) { // สคริปต์ดำเนินการสำเร็จ ให้ส่งคืนเอาต์พุต return implode("\n", $output); } อื่น { // การดำเนินการสคริปต์ล้มเหลว บันทึกข้อผิดพลาดและส่งคืนข้อความแสดงข้อผิดพลาด error_log('ข้อผิดพลาดในการเรียกใช้สคริปต์ Python คำสั่ง: ' . $python_command); ส่งคืน 'ข้อผิดพลาดในการเรียกใช้สคริปต์ Python'; } } else { // ไม่พบไฟล์มีเดีย บันทึกข้อผิดพลาดและส่งกลับข้อความแสดงข้อผิดพลาด error_log('Media file not found for media ID' . $args['media_id']); กลับ 'ไม่พบไฟล์มีเดีย'; } } add_shortcode('run_python_script', 'cwpai_run_python_script');

ตอนนี้คุณสามารถใช้รหัสย่อ [run_python_script media_] ได้โดยตรงในโพสต์และเพจของคุณ แทนที่ "6" ด้วย ID ของไฟล์มีเดียที่คุณต้องการใช้

ใช้บริการโฮสต์

มีบริการโฮสต์มากมายที่ให้คุณเข้าถึง Python ผ่าน API สิ่งนี้อาจเป็นประโยชน์สำหรับโครงการและเวิร์กโฟลว์ที่ซับซ้อนมากขึ้น โดยเฉพาะอย่างยิ่งเมื่อคุณสามารถเข้าถึงเอาต์พุตใน PHP (โดยใช้ CURL) เหมือนกับว่าคุณสร้างปลั๊กอินของคุณเอง

ก่อนอื่น คุณจะต้องสร้าง API ด้วย Python นี่เป็นแหล่งข้อมูลที่ดีสำหรับสิ่งนั้น คุณจะใช้ Flask เพื่อสร้างเว็บแอปที่แสดงจุดสิ้นสุดของ API จากนั้น คุณจะโฮสต์เว็บแอปนั้นด้วยหนึ่งในบริการเหล่านี้ และเข้าถึงจุดสิ้นสุด API ต่างๆ ด้วย PHP

นี่คือตัวอย่าง Python App ที่มี API:

# api.py นำเข้าแบบสุ่มจากขวด นำเข้าขวด คำขอ แอป jsonify = Flask(__name__) things_list = [ "Apple", "Banana", "Carrot", "Dog", "Elephant", "Flower", "Guitar" , "บ้าน", "กระท่อมน้ำแข็ง", "แจ็คเก็ต" ] @app.route('/api/data', method=['POST']) def process_data(): data = request.get_json() message = data.get ('ข้อความ') Random_thing = Random.choice(things_list) response_data = {'การตอบสนอง': f'ข้อความที่ได้รับ: {ข้อความ} สิ่งที่สุ่ม: {random_thing}'} กลับ jsonify(response_data) ถ้า __name__ == '__main__': app.run(debug=True)

และฉันจะเข้าถึงมันใน PHP ได้อย่างไร ทำให้ฉันสามารถใช้ข้อมูลนั้นใน WordPress (ไม่ว่าจะเป็นการเปลี่ยนช่องฐานข้อมูล เพิ่มผู้ใช้ใหม่ ฯลฯ...)

<?php // URL ปลายทาง API $apiUrl = 'http://your-python-api-domain.com/api/data'; // ข้อมูลที่จะส่งไปยัง Python API $data = array( 'message' => 'Hello from PHP!' ); // แปลงข้อมูลเป็น JSON $dataJson = json_encode($data); // เริ่มต้นเซสชัน cURL $ch = curl_init(); // ตั้งค่าตัวเลือก cURL curl_setopt($ch, CURLOPT_URL, $apiUrl); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $dataJson); curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json')); curl_setopt($ch, CURLOPT_RETURNTRANSFER, จริง); // ดำเนินการเซสชัน cURL และจับการตอบสนอง $response = curl_exec($ch);

ขณะนี้ ด้วยข้อมูล $response คุณสามารถใช้กับฟังก์ชัน WordPress ใดก็ได้ นี่เป็นตัวอย่างพื้นฐาน แต่ก็ดีที่จะแสดงให้เห็นว่าคุณจะทำอย่างไร

หากคุณเชี่ยวชาญด้านเทคนิคและต้องการของราคาถูก ฉันขอแนะนำให้ปรับใช้แอป Python ของคุณโดยใช้ Digital Ocean ซึ่งมีราคา 2.50 ดอลลาร์/เดือนสำหรับสิ่งง่ายๆ

หากคุณต้องการอะไรที่รวดเร็ว เรียบง่าย ลองดู PythonAnywhere.com ซึ่งเริ่มต้นที่ $5/เดือน

นอกเหนือจากสถานการณ์เล็กๆ แล้ว วิธีนี้น่าจะเป็นวิธีที่ดีที่สุดในการทำสิ่งต่างๆ

แปลง Python เป็น PHP

อีกทางเลือกหนึ่งคือแปลง Python เป็น PHP และใช้ปลั๊กอินเช่น Code Snippets เพื่อเรียกใช้ฟังก์ชันนั้น

คุณสามารถแปลงเป็น PHP ได้ด้วยตนเอง หรือใช้เครื่องมือเช่น ChatGPT หรือ CodeWP เพื่อวางใน Python และขอให้เขียนใหม่เป็น PHP ต่อไปนี้เป็นตัวอย่างของ CodeWP ซึ่งเป็นเครื่องมือ AI ที่สร้างขึ้นสำหรับผู้สร้าง WordPress โดยเฉพาะ:

lepage-2023-07-24-at-12-45-16

บทสรุป

ในฐานะนักพัฒนา WordPress ที่ทำงานร่วมกับ AI ฉันมักพบว่าตัวเองต้องการจำลองบางอย่างด้วย Python อย่างรวดเร็ว หรือแม้กระทั่งสร้างฟังก์ชันระดับการผลิตที่สมบูรณ์ในภาษา

เมื่อทำตามวิธีการเหล่านี้ คุณจะสามารถเรียกใช้ python บนไซต์ WordPress ได้อย่างรวดเร็วและเข้าถึงผลลัพธ์ที่อาจสร้างขึ้น