O modalitate de a schimba URL-urile imaginilor din postări în URL-uri CDN?
Din motive necunoscute, furnizorul meu de hosting nu poate remedia problema când folosesc W3 Total Cache sau W3 Super Cache pentru caching - utilizarea SQL a site-ului meu continuă să atingă niveluri maxime... iar la vârfuri ridicate, serverele devin lente și uneori cad.
Din această cauză, trebuie să folosesc pluginul Hyper Cache pentru caching, deoarece funcționează perfect, dar acest plugin nu suportă CDN.. Am achiziționat un serviciu CDN de la MaxCDN, dar pentru asta ar trebui să folosesc W3 Total Cache sau Super Cache...
Așadar, caut o modalitate de a schimba automat URL-urile imaginilor din postări de exemplu de la: http://www.sitename.com/wp-content/uploads..... la http://cdn.sitename.com/wp-content/uploads...
Este posibil? Dacă da, vă rog să mă ajutați. Mulțumesc anticipat.
Ai verificat acest plugin? http://wordpress.org/extend/plugins/cdn-rewrites/
Din descrierea plugin-ului:
În esență, acest plugin permite unui utilizator WordPress să specifice două variabile importante: un gazdă de origine (site-ul tău) și o "gazdă destinație" (gazda CDN). Acesta va găsi apoi toate conținuturile statice de la acea gazdă de origine și le va rescrie în destinație, astfel încât acestea să fie livrate de acolo.
Se pare că este ceea ce ai nevoie?
------------------------------ EDIT
Dacă încerci să eviți utilizarea plugin-urilor, iată un articol excelent despre acest subiect: http://www.cyberciti.biz/tips/wordpress-cdn-content-delivery-network-configuration.html
Cu toate acestea, nu am încercat niciodată această metodă. Dar pare a fi o soluție curată.

Un răspuns ar trebui să fie mai mult decât un link către un site extern. Te rog adaugă câteva informații în răspunsul tău: Ce face plugin-ul și cum funcționează. Mulțumesc.

Mulțumesc, voi încerca asta, dar încerc să găsesc o modalitate fără a folosi niciun plugin

poate ar fi bine să te uiți la codul din plugin și să vezi dacă poți să-l integrezi în tema ta. este un plugin destul de simplu

am adăugat plugin-ul dar mi-a stricat panoul de administrare lol.. nu mai pot adăuga etichete

asta e o glumă. plugin-ul adaugă din nou jquery, ceea ce e inutil și jqueryui, pe care probabil îl ai deja rulând. A trebuit să elimin încărcarea pentru că provoca probleme. Poți comenta acele linii în cdnr.class.php - nu sunt sigur dacă asta cauzează problema ta totuși..

nu știu dacă ai rezolvat, dar uite un plugin alternativ de verificat: http://wordpress.org/extend/plugins/cdn-sync-tool/ care trebuie folosit împreună cu http://wordpress.org/extend/plugins/wp-super-cache/

dacă imaginile rămân în aceeași locație și doriți doar să schimbați subdomeniul, .htaccess RewriteRule ar fi cea mai ușoară soluție:
dacă regula se aplică doar imaginilor, atunci:
RewriteCond %{HTTP_HOST} =www.sitename.com
RewriteRule ^.+\.(jpe?g|png|other|img|ext)$ http://cdn.sitename.com/$0 [nocase,redirect=temp,last]
ați putea adăuga un test RewriteCond pentru imagini, dar testul efectuat în RewriteCond folosește aceleași resurse ca și efectuarea lui o singură dată în RewriteRule.
de asemenea, puteți redirecționa totul din directorul uploads. dacă cdn.sitename.com trece prin același set de reguli .htaccess, aș include instrucțiunea RewriteCond:
RewriteCond %{HTTP_HOST} =www.sitename.com
RewriteRule ^wp-content/uploads/.+$ http://cdn.sitename.com/$0 [nocase,redirect=temp,last]
[redirect=temp] sau [redirect=permanent]; adesea scris ca [R=302] și [R=301].
documentația apache mod_rewrite
(evidențierea/formatarea automată a sintaxei nu a fost proiectată cu .htaccess în minte :-)
salutări,
Gregory

Puteți analiza conținutul pentru imagini folosind regex în the_content
, dar această metodă este întotdeauna încărcată și lentă.
O alternativă mai rapidă ar fi să modificați URL-ul imaginilor după salvarea postului în baza de date (post_save
) sau să actualizați posturile existente din baza de date, creând un CDN personalizat. Astfel, plugin-urile de caching nu vor mai fi nevoite să analizeze conținutul de fiecare dată.
Pentru detalii despre implementarea unui CDN personalizat în WordPress, consultați acest răspuns.

dacă dorești să modifici manual sursele imaginilor, această funcție este pentru tine; wp_update_post( $post ); combinată cu o buclă care parcurge fiecare articol și tipul de articol pe care dorești să îl afectezi, folosind preg_replace pentru a înlocui URL-urile surselor.
atribuie șablonul unei pagini, încarcă pagina ori de câte ori dorești să actualizezi URL-urile surselor, șterge pagina atunci când nu dorești ca alții să ruleze codul.
șabloanele de căutare/înlocuire pentru grep_replace() ar arăta cam așa:
căutare: (<img [^>]*?src=['"]https?://)www\.sitename\.com
înlocuire: $1cdn.sitename.com
sau mai precis:
căutare: (<img [^>]*?src=['"]https?://)www(\.sitename\.com/wp-content/uploads/)
înlocuire: $1cdn$2
chiar dacă wp_update_post() creează automat o revizie în caz că ai nevoie să anulezi modificarea, fă o copie de rezervă a bazei de date înainte de a încărca pagina.
aș testa mai întâi combinația dintre buclă, wp_update_post() și preg_replace() pe un set limitat de articole, eventual specificând ID-urile articolelor într-un array și parcurgând acel array.
o opțiune suplimentară ar putea fi crearea unei categorii temporare 'Actualizat CDN' și atribuirea acestei categorii fiecărui articol pe măsură ce îl actualizezi. apoi, ai putea exclude din interogările viitoare orice articol care are această categorie. micul dezavantaj este că, chiar dacă ulterior ștergi categoria, valorile vor rămâne salvate pentru fiecare articol în baza de date (corectează-mă dacă greșesc).
salutări,
Gregory

aceasta este o soluție excelentă, Gregory! totuși, recomand cu adevărat să faci înlocuirea direct înainte de acțiunea de salvare, deoarece nu trebuie să te îngrijorezi de postările noi ulterioare. dacă site-ul tău are multe postări, o funcție care parcurge toate postările din nou și din nou necesită mult timp pentru a fi executată.

:-) Fischi, de aceea recomand să plasezi codul într-un șablon specializat, să atribui acel șablon unei Pagini și să încarci Pagina doar atunci când dorești să rulezi funcția de actualizare. programatorul poate chiar include o verificare de rol în șablon pentru a permite doar administratorilor să încarce Pagina.

poți folosi și acțiunea pre_post_update
.
beneficiul este că serverul tău va schimba URL-urile doar o singură dată - astfel încât nu vei folosi mereu scriptul str_replace
pe care l-ai scris la afișare, ci doar la salvare.
presupunând că ești familiarizat cu înlocuirea în sine, doar introdu funcția ta în această funcție și gata!
add_action('pre_post_update', 'change_image_urls', 10 );
function change_image_urls( $post_id ) {
// funcția ta aici...
// $post = get_post( $post_id );
}

da, are sens, dar având în vedere că sunt deja 990 de articole publicate nu sunt sigur cum ar ajuta asta. așa că folosesc doar un str_replace într-o funcție în functions.php care înlocuiește..

ok, înțeles punctul tău de vedere - poți scrie o mică funcție care să fie apelată din backend, unde să cauți prin toate articolele și să le actualizezi o dată? știu că durează cu cele 990 publicate, dar ar fi o soluție elegantă. ai putea folosi și un plugin de căutare și înlocuire pentru a efectua această acțiune direct în baza de date.
