0

Ich benutze Wordpress 4.5. Zu einem früheren Zeitpunkt habe ich einen lokalen Server verwendet, um das Image zu speichern (inkl. Featured Image, zum Beispiel: wp-content/uploads/2016/03/aaabbbccc.jpg). Jetzt möchte ich es in AWS S3 Bucket und Cloudfront verschieben, und ich möchte nicht in der Wordpress-Datenbank ändern und entschied sich, ein Plugin zu schreiben, um meine Cloudfront-Domäne (ersetzen Sie die aktuelle Domäne) zu wp-content Link jedes Mal aus Datenbank abrufen wie zum Beispiel: https://xxyyzzqqaa.cloudfront.net/wp-content/uploads/2016/03/aaabbbccc.jpg.Wordpress - Wie URI von Featured Bild zu ändern, bevor es geladen

Ich benutze eine Aktion Haken in meiner Plugin:

add_action('the_post', 'change_featured_image'); 

Nun weiß ich nicht, was als nächstes zu tun? Bitte geben Sie mir einen Vorschlag, danke im Voraus!

Antwort

0

Ich fand die Lösung für mein Problem, es ist sehr einfach, aber ich bin Neulinge mit WP, so kann ich das nicht sehen.

In Ihrem Plugin, oder wo Sie wollen, fangen dieses Ereignis, wenn WP Last, fügen Sie diesen Filter:
add_filter ('post_thumbnail_html', 'change_featured_image');
mit:

  • post_thumbnail_html ist build-in-Filter von WP.
  • change_featured_image ist die Funktion, Benutzer definieren, und führen Sie vor post_thumbnail_html geben Sie das Ergebnis zurück.

Ich habe einige verwirrend in dieser Funktion, ich kenne die Variable nicht, um Wert zu erhalten. Schließlich habe ich es im WP-API-Dokument gefunden, das jeder Vars-Build-In-Filter verwendet, den Sie auch verwenden können.

Hier ist der Beispielcode:

function change_featured_image($attr) 
{ 

    global $wpdb; 

    $opt = get_option('s3dcs_status');//My value in `wp_options` 
    if(empty($opt)) echo $attr; 
    else{ 
     /// Preparing variables 
     $pattern = '~(http.*\.)(jpe?g|png|[tg]iff?|svg)~i'; 
      $m = preg_match_all($pattern,$attro,$matches); 
     $il = $matches[0][0]; 
     $tail = explode("wp-content", $il)[1]; 
     $s3dcs_remote_link = get_option('s3dcs_cfs3in') . "/wp-content" . $tail; 
       echo str_replace($il, $s3dcs_remote_link, $attr) ; 
    } 
} 

Das ist alles. Wenn Sie ein Problem haben, posten Sie bitte hier, damit jeder es wissen kann.

Verwandte Themen