Cum să rulați scripturi Python în WordPress

Publicat: 2023-08-03

Python continuă să crească în popularitate datorită ușurinței sale de utilizare, bibliotecilor puternice și sintaxei simple. Adesea mă trezesc să creez prototipuri de funcționalități individuale pentru WordPress cu Python înainte de a le converti în PHP.

Dar în loc să faci asta, de ce să nu rulezi Python pe WordPress? În această postare, vom discuta despre diferitele metode care pot fi utilizate pentru a rula codul Python direct pe un site web WordPress.

Rulați scripturi Python pe WordPress

Putem folosi o funcție PHP încorporată numită exec() pentru a rula scripturi externe, inclusiv din Python. Acest lucru va necesita un pic de cod atât în ​​PHP, cât și în Python pentru a funcționa, dar este destul de ușor odată ce înțelegeți cum se potrivește totul.

david-clode-ojlt2xbwuws-unsplash-1

Putem crea fie un plugin, fie un fragment de cod. Depinde de ceea ce doriți să construiți, dar de obicei creez un fragment de cod care este mai ușor de gestionat pe front-end-ul site-ului web.

În primul rând, asigurați-vă că Python este instalat global pe serverul dvs. O puteți face singur dacă aveți acces root, dacă nu, va trebui să cereți gazdei dvs. web să-l instaleze. De exemplu, pe Cloudways, trebuia să le punem să instaleze Python pentru noi.

Funcția PHP

Vom crea codul pentru a crea o funcție PHP care va rula orice script Python în WordPress. Pentru ușurință în utilizare, vă voi arăta mai întâi un fragment care poate fi utilizat cu un plugin de gestionare a fragmentelor de cod. Apoi putem arunca o privire la construirea unui plugin personalizat pentru a face același lucru.

Cu această funcție, toate scripturile Python trăiesc în biblioteca media și putem selecta scriptul de rulat specificând ID-ul articolului din biblioteca media. Rețineți că probabil va trebui să permiteți încărcarea tipului mime Python. Am folosit acest plugin pentru a-l activa.

Acest lucru pare puțin complicat, deoarece am ajuns să adaug o mulțime de gestionare a erorilor. Dar, în esență, tot ceea ce face codul este să găsească fișierul din biblioteca media și să ruleze scriptul, scoțând orice va returna.

Vă rugăm să rețineți că am folosit „python3”, deoarece acesta este ceea ce este instalat pe mașina mea. Poate doriți să îl schimbați în „python”.

<?php function cwpai_run_python_script($media_id) { // Obține calea fișierului media pe server $media_path = get_attached_file($media_id); // Verificați dacă fișierul media există dacă ($media_path) { // Setați comanda Python $python_command = 'python3 ' . escapeshellarg($media_path); // Rulați scriptul Python și capturați rezultatul exec($python_command, $output, $return_status); if ($return_status === 0) { // Scriptul executat cu succes, returnează output-ul return implode("\n", $output); } else { // Execuția scriptului a eșuat, înregistrează eroarea și returnează un mesaj de eroare error_log('Eroare la executarea scriptului Python. Comanda: ' . $python_command); returnează „Eroare la executarea scriptului Python.”; } } else { // Fișierul media nu a fost găsit, înregistrați eroarea și returnați un mesaj de eroare error_log('Fișierul media nu a fost găsit pentru ID-ul media' . $media_id); returnează „Fișierul media nu a fost găsit.”; } } // Exemplu de utilizare cu ID media 6 $result = cwpai_run_python_script(6); // Afișează rezultatul sau gestionează eroarea if (is_string($result)) { // Dacă rezultatul este un șir, indică un mesaj de eroare echo $result; } else { // Dacă rezultatul nu este un șir, ar trebui să fie rezultatul scriptului Python // Afișează rezultatul sau efectuează o procesare ulterioară dacă este necesar echo $result; }

Dacă creăm un plugin, structura poate arăta astfel:

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

cwpai_plugin.php arată astfel:

<?php /* Nume plugin: CWPAI My Python Plugin Descriere: Un plugin pentru a executa scripturi Python pentru fișierele media. Versiunea: 1.0 Autor: Numele dvs. */ // Codul de plugin va merge aici. function cwpai_run_python_script($file_name) { // Obține calea directorului pluginului $plugin_dir = plugin_dir_path(__FILE__); // Setați calea scriptului Python în raport cu directorul pluginului $python_script_path = $plugin_dir . „active/py/” . $nume_fișier; // Verificați dacă fișierul script Python există dacă (file_exists($python_script_path)) { // Setați comanda Python $python_command = 'python3 ' . escapeshellarg($python_script_path); // Rulați scriptul Python și capturați rezultatul exec($python_command, $output, $return_status); if ($return_status === 0) { // Scriptul executat cu succes, returnează output-ul return implode("\n", $output); } else { // Execuția scriptului a eșuat, înregistrează eroarea și returnează un mesaj de eroare error_log('Eroare la executarea scriptului Python. Comanda: ' . $python_command); returnează „Eroare la executarea scriptului Python.”; } } else { // Fișierul script Python nu a fost găsit, înregistrează eroarea și returnează un mesaj de eroare error_log('Fișierul script Python nu a fost găsit: ' . $python_script_path); returnează „Fișierul script Python nu a fost găsit.”; } }

Pentru plugin, este mai rapid să includeți Scripturile Python într-un anumit director (în acest exemplu, este assets/py), permițându-vă să le adăugați și să le editați prin FTP. Prin urmare, este mai bine dacă aveți o mulțime de Python de rulat în WordPress.

Pentru a-l folosi, apelați pur și simplu funcția:

// Exemplu de utilizare cu numele de fișier „example.py” $result = cwpai_run_python_script('example.py'); // Afișează rezultatul sau gestionează eroarea if (is_string($result)) { // Dacă rezultatul este un șir, indică un mesaj de eroare echo $result; } else { // Dacă rezultatul nu este un șir, ar trebui să fie rezultatul scriptului Python // Afișează rezultatul sau efectuează o procesare ulterioară dacă este necesar echo $result; }

Cod scurt

În „producție”, realizarea unui cod scurt WP pentru a rula un script Python poate fi de asemenea utilă. Putem folosi aceeași funcție generală de mai sus, modificând pentru a o transforma într-un cod scurt WordPress:

function cwpai_run_python_script($atts) { // Extrage atributele shortcode $args = shortcode_atts(array('media_id' => '1'), $atts); // Obține calea fișierului media pe server $media_path = get_attached_file($args['media_id']); // Verificați dacă fișierul media există dacă ($media_path) { // Setați comanda Python $python_command = 'python3 ' . escapeshellarg($media_path); // Rulați scriptul Python și capturați rezultatul exec($python_command, $output, $return_status); if ($return_status === 0) { // Scriptul executat cu succes, returnează output-ul return implode("\n", $output); } else { // Execuția scriptului a eșuat, înregistrează eroarea și returnează un mesaj de eroare error_log('Eroare la executarea scriptului Python. Comanda: ' . $python_command); returnează „Eroare la executarea scriptului Python.”; } } else { // Fișierul media nu a fost găsit, înregistrați eroarea și returnați un mesaj de eroare error_log('Fișierul media nu a fost găsit pentru ID-ul media ' . $args['media_id']); returnează „Fișierul media nu a fost găsit.”; } } add_shortcode('run_python_script', 'cwpai_run_python_script');

Acum puteți folosi codul scurt [run_python_script media_] direct în postările și paginile dvs. Înlocuiți „6” cu ID-ul fișierului media pe care doriți să îl utilizați.

Utilizați un serviciu găzduit

Există zeci de servicii găzduite care vă permit să accesați Python prin intermediul API-urilor. Acest lucru ar putea fi util pentru proiecte și fluxuri de lucru mai complexe, mai ales că puteți accesa rezultatul în PHP (folosind CURL) la fel ca și cum ați crea propriul plugin personalizat.

În primul rând, va trebui să creați un API cu Python. Iată o resursă bună pentru asta. În esență, veți folosi Flask pentru a crea o aplicație web care expune punctele finale API. Apoi, veți găzdui acea aplicație web cu unul dintre aceste servicii și veți accesa diferitele puncte finale API cu PHP.

Iată un exemplu de aplicație Python care are API:

# api.py import aleatoriu din balon import Flask, request, jsonify app = Flask(__name__) things_list = [ „Mere”, „Banana”, „Morcov”, „Câine”, „Elephant”, „Floare”, „Chitară” , „House”, „Igloo”, „Jacket” ] @app.route('/api/data', methods=['POST']) def process_data(): data = request.get_json() message = data.get ('mesaj') random_thing = random.choice(things_list) response_data = {'răspuns': f'Mesaj primit: {mesaj}. Lucru aleatoriu: {random_thing}'} returnează jsonify(response_data) if __name__ == '__main__': app.run(debug=True)

Și cum l-aș accesa în PHP, permițându-mi să folosesc acele date în WordPress (fie că este vorba despre schimbarea câmpurilor bazei de date, adăugarea unui nou utilizator etc...)

<?php // Adresa URL a punctului final API $apiUrl = 'http://your-python-api-domain.com/api/data'; // Date de trimis către API-ul Python $data = array( 'message' => 'Bună ziua de la PHP!' ); // Convertiți datele în JSON $dataJson = json_encode($date); // Initializeaza sesiunea cURL $ch = curl_init(); // Setați opțiunile 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, adevărat); // Executați sesiunea cURL și capturați răspunsul $response = curl_exec($ch);

Acum, cu datele $response, le puteți folosi cu orice funcții WordPress. Acesta este un exemplu de bază, dar bun pentru a arăta cum ați face acest lucru.

Dacă sunteți puțin tehnic și doriți ceva ieftin, vă sugerez să implementați aplicația dvs. Python folosind Digital Ocean, care costă 2,50 USD/lună pentru lucruri simple.

Dacă doriți ceva rapid, simplu și ușor, accesați PythonAnywhere.com, care începe de la 5 USD/lună.

În afară de scenariile mici, această metodă este probabil cea mai bună modalitate de a face lucrurile.

Convertiți Python în PHP

O altă opțiune ar fi pur și simplu să convertiți Python în PHP și să utilizați un plugin precum Code Snippets pentru a rula acea funcție.

Puteți să îl convertiți manual în PHP sau să utilizați un instrument precum ChatGPT sau CodeWP pentru a lipi în Python și a solicita rescrisul în PHP. Iată un exemplu cu CodeWP, un instrument AI creat special pentru creatorii WordPress:

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

Concluzie

Fiind un dezvoltator WordPress care lucrează cu AI, de multe ori mă trezesc nevoit să iau joc rapid ceva cu Python sau chiar să creez funcționalități complete la nivel de producție în limbaj.

Urmând aceste metode, puteți rula rapid python pe un site WordPress și puteți accesa orice rezultat ar putea produce.