Regenerate Thumbnails weg
-
Hallo!
Regenerate Thumbnails verschwindet ja bei jedem Update aus dem Blickfeld jener User, welche nicht Admin sind.Dies lies sich mit folgenden Codeschnippsel in der functions.php des Child-Themes lösen:
add_filter( 'regenerate_thumbs_cap', function() { return 'upload_files'; } );
Doch seit v. 3.0 versagt dieser Trick – wer weiß einen anderen Weg?
Wichtig wäre, dass eben auch Redakteure dieses Plugin sehen dürfen.Danke
-
Grundsätzlich ist der Filter weiterhin vorhanden und das Snippet funktioniert auch, wenn du es an die
regenerate_thumbnails.php
anhängst, aber nicht mehr im Theme. Ich habe auch versucht, die Funktion mit einem Hookafter_theme_setup
einzubinden, was aber nichts gebracht hat. Jetzt habe ich im Support-Forum des Plugins (wo die Frage eigentlich hingehört) selber nachgefragt und bin auf die Antwort von Alex gespannt.Der Filter scheint auch nach dem Rewrite in 3.0 noch da zu sein:
https://github.com/Viper007Bond/regenerate-thumbnails/blob/e530266f69f3440fd4c33caba9ec0f1e8545b6b2/regenerate-thumbnails.php#L119Frag‘ also besser im Plugin-Forum nach, dann erreichst du auch den Entwickler:
https://wordpress.org/support/plugin/regenerate-thumbnailsOder noch besser, melde es dem Entwickler als Bug per Github-Issue:
https://github.com/Viper007Bond/regenerate-thumbnails/issuesPerfekt: Repariere es selbst und sende einen Pull Request! 😉
Gruß, Torsten
8 Sekunden zu spät für Support-Mastermind-Bego. Verdammt. 😉
Ups … Sorry, Torsten. ¯\_(ツ)_/¯
(Meine Antwort hatte etwas länger gedauert, weil ich das Plugin erst mal übersetzt habe.)
Hallo und Danke für die Antworten
das Snippet funktioniert auch, wenn du es an die regenerate_thumbnails.php anhängst, aber nicht mehr im Theme.
Sowas ähnliches hab ich früher mal gemacht und beim Update wars natürlich weg.
Da riet mir jemand folgendes zu machen:
statt manage_options
$this->capability = apply_filters( 'regenerate_thumbs_cap', 'manage_options' );
„upload_files“ notieren
$this->capability = apply_filters( 'regenerate_thumbs_cap', 'upload_files' );
Daher hab ich mir dann die (eingangs erwähnte) Lösung mit dem Filter, aber id. functions des Child ausgedacht, denn das sollte vom Update des Plugins nicht berührt werden. So mein laienhaftes Denken.
Ich verstehe eure Kritik, wenn ich immer lese „Frag den Entwickler … des Plugins, Themes, … etc.“ Das würde ich gerne tun, doch ich kann kein englisch, daher sind auch alle Tipps zu fremdsprachigen Ressourcen gut gemeint, aber für mich leider selten nützlich.
Auch kenne ich mich (daher) nicht mit so Sachen wie Bugmeldern uä. aus, lasse diese Optionen lieber jenen, die sich auskennen.PS: Habe die Sache aber per Google-Translator ins Supportforum gestellt. Da antwortete mir zwar noch keiner, dafür bekomme ich einen Haufen Mails von denen – die ev. auch damit zu tun haben?
Danke!
Wenn du ein Code-Snippet an ein Plugin oder Theme anhängst, wird das natürlich beim nächsten Update des Plugins bzw. Themes überschrieben. Deshalb solltest du entweder ein Child Theme, ein eigenes, zusätzliches Plugin oder ein Code Snippet (für Plugin Code Snippets) erstellen.
Die Berechtigung
manage_options
ist eine Berechtigung für Administratoren, währendupload_files
schon für Autoren gilt. Diese Berechtigungen haben nichts damit zu tun, ob Änderungen beim Update überschrieben werden.PS: Habe die Sache aber per Google-Translator ins Supportforum gestellt.
Es wäre hilfreich, wenn du demnächst früher darauf hinweist. Ich habe mir jetzt extra die Mühe gemacht, deine Frage im Plugin-Supportforum weiterzugeben. Das hätte ich mir mit einem Hinweis sparen können.Übrigens … wofür nutzt du das Plugin eigentlich? Das Plugin ist eigentlich als Werkzeug vorgesehen, wenn du ein Theme wechselst oder nachträglich die Einstellungen für die Bildgrößen (Einstellungen > Medien) änderst. Für diese Änderungen benötigst du Administratoren-Rechte. Wieso willst du dann Autoren das recht nur Neuberechnung der Bildgrößen zuweisen? – Ich vermute, dass es sich hier um ein Missverständnis handelt. Vielleicht können wir das hier klären?
Hallo Bego
Zum 1. Absatz: Ja, weiß ich. Sagte ich ja, dass ich dies deswegen in die functions.php des Child-Themes gab. Wo ich es vor Updates des Plugins sicher wähnte.zum 2. Absatz: Den Tipp mit
manage_options
gab mir jemand aus einem Forum, das klappte auch – bis eben die neue regenerate_thumbnails.php kam. Eh klar.
upload_files
– hab ich mir selber ausgesucht, dachte wer Bilder raufladen darf, wird die auch verändern wollen, dürfen. Klappte auch.
Beide Sachen sollten eben nur sicherstellen, dass meine Autoren dass auch weiterhin können.
(Nirgends glaubte ich, dass würde vor Update bedingten Änderungen schützen)Sorry, dass habe mit dem engl. Supportforum habe ich knapp nach dem Eintrag hier gemacht und den kann man ja nicht editieren. Danke für die Mühe – aber Antwort hat noch keiner unserer Beiträge. Denke es gibt noch mehr Probleme mit RT, seit v 3.0?
Wieso ich, (bzw. die Autoren) RT brauche:
Nun, ich weiß, es ist nach einem Themewechsel super zur Neuberechnung der Bildgrößen, dafür war es ursprünglich ja installiert.
Doch es gibt ein weiteres Einsatzgebiet, welches hpts. die Autoren betrifft:
Wir haben ua. ext. Bildquellen, zT. von pixabay und die Autoren holen mit deren Plugin Bilder rein. Jene gehen aber nicht durch den WP, bzw. Theme-gesteuerten Image-Prozess (oder wie das heißt) sondern werde nnur in einer Größe geladen.
Um jene auch in die div. Bildgrößen des Themes zu bringen ist RT täglich viele Male im Einsatz.Nun könnte ich meiner Chefin und Redakteurin auch den Admin geben, dann gehts wieder. Aber die meckert dann wegen all der „unnötigen Sachen“ Menüeinträge mit denen sie besser eh nichts anfängt.
Nochmal Danke für deine Mühe
Inzwischen gibt es eine Antwort vom Autor von Regenerate Thumbnails, Alex Mills. Die Lösung ist ganz simpel (und ich ärgere mich, dass ich da nicht selbst drauf gekommen bin):
Du öffnest die Datei
wp-content/plugins/regenerate-thumbnails/regenerate-thumbnails.php
und änderst die letzte Zeile aufadd_action( 'init', 'RegenerateThumbnails' );
Danach kannst du wie gewohnt in der
functions.php
eines Child Themes das bereits verwendete Snippet nutzen:add_filter( 'regenerate_thumbs_cap', function() { // See https://codex.wordpress.org/Roles_and_Capabilities return 'upload_files'; } );
Bei Updates werden zwar Änderungen in Plugins überschrieben, aber Alex hat angekündigt, dass er diese Änderung in der kommenden Version einfügen wird. Du brauchst dich dann also um nichts mehr zu kümmern.
Hallo und Danke!
Das funzt.
Die Antwort vom Autor hätte ich ohnehin nicht verstanden, aber evtl. kann man mir das irgendwann mal erklären, warum es nun geht und wie das mit dem Snippet zusammenhängt, usw. …
Ich kapiere nur, dass nun wieder das bisherige „init“ verwendet wird, dann gehts. Im codex stünde es eh, was das alles heißt, wo der Unterschied zu „plugins_loaded“ ist – aber wie gesagt, ich verstehe es nicht.
Nochmal Danke!
„Hooks“ (wie z.B.
init
oderplugins_loaded
) sind Schnittstellen, die Entwickler nutzen können, um eigene Funktionen einzufügen. Deine Änderung der Benutzerrechte ist auch so eine Funktion.Das Problem hier war aber, dass der Plugin-Autor für das Plugin selbst einen Hook verwendet hat der bereits ausgeführt wird, bevor das Theme die Funktion mit den Benutzerrechten einbinden kann. Dadurch greift die Funktion dann nicht mehr und die Benutzerrechte können nicht mehr geändert werden.
Hilft dir diese Erklärung weiter?
Ja, evtl. kapiere ich es nun teilweise.
in der alten Version stand am Ende der regenerate-thumbnails.php:
// Start up this plugin add_action( 'init', 'RegenerateThumbnails' ); function RegenerateThumbnails() { global $RegenerateThumbnails; $RegenerateThumbnails = new RegenerateThumbnails(); }
Da wird die darunter notierte function RegenerateThumbnails() per init aufgerufen, gestartet oder so. Und diese „init“ Methode lässt zu, dass eigene Theme-Funktionen vorher laufen können.
Nun stand ab v 3 da:
add_action( 'plugins_loaded', 'RegenerateThumbnails' );
Das plugins_loaded scheint, hmmm … anders zu sein, es lädt das Plugin schneller, immer vor dem Theme, dessen functions.php.Damit haben wir die „alte“ Initialisierung wieder hergestellt:
add_action( 'init', 'RegenerateThumbnails' );
Ich bemühe mich es zu verstehen, aber ich bin nur ein interessierter Laie. Evtl. ist meine obige „Erklärung“ völliger Blödsinn.
Im Endeffekt reichts wenn alle Autoren das RT wieder sehen.Jedenfalls Danke für alles – allein hätte ich das nie hinbekommen!
Keine falsche Bescheidenheit, die Erklärung ist einwandfrei.
Freut mich, dass wir das Problem lösen konnten.
Echt? Cool!
Tja, dann Danke nochmals – auch an den Plugin-Autor. Dem ich bloß ein Thanks you schrieb …
Tschü
Hier nochmal als Bild der WP-Ladeprozess. Da sieht man wo
init
undplugins_loaded
im Zeitstrahl sind 🙂
https://www.rarst.net/wordpress/wordpress-core-load/Gruß, Torsten
Hallo und Danke
Ich kapiere diese Grafik zwar nicht ganz (wie auch? Bin kein Programmierer oder so); Aber dh. was im innersten Kasten ist, kommt rel. spät, eher zum Schluss dran.
Dh. auch, diesesplugins_loaded
wäre nur ein Schritt vor der functions.php des Childs.
Wenn also jemandplugins_loaded
als „Start“ für sein Plugin-Script nimmt, kommen Codes aus der functions.php quasi zu spät. Zu spät um das zuvor gestartete Script zu beeinflussen?Bei init stehen die Befehle aus der functions.php schon im Quelltext, wenn das Pluginscript startet.
Etwas OT:
Die functions.php des Childs wird vor der des Eltern Themes geladen? Nehme an, dass ist weil man in der Datei ja gewisse Funktionen des Parent nochmal notieren (u. modifizeren) kann. Und die functions.php des Parent-Themes hat ein if () davor.
if (!function_exists('funktionsname')) {
Wenn nicht, startet die vom Parent, wenn vorhanden, dann die vom Child – stimmts?
(Den Absatz kann man löschen wenns nicht hier her passt – wäre nur zum Verständnis dieser Lade-Hierarchie)Danke!
- Das Thema „Regenerate Thumbnails weg“ ist für neue Antworten geschlossen.