Support » Plugins » Regenerate Thumbnails weg

  • Gelöst pezi

    (@pezi)


    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

Ansicht von 15 Antworten - 1 bis 15 (von insgesamt 16)
  • 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 Hook after_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#L119

    Frag‘ also besser im Plugin-Forum nach, dann erreichst du auch den Entwickler:
    https://wordpress.org/support/plugin/regenerate-thumbnails

    Oder noch besser, melde es dem Entwickler als Bug per Github-Issue:
    https://github.com/Viper007Bond/regenerate-thumbnails/issues

    Perfekt: 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.)

    Thread-Starter pezi

    (@pezi)

    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ährend upload_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?

    Thread-Starter pezi

    (@pezi)

    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

    @pezi

    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 auf

    add_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.

    Thread-Starter pezi

    (@pezi)

    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 oder plugins_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?

    Thread-Starter pezi

    (@pezi)

    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.

    Thread-Starter pezi

    (@pezi)

    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 und plugins_loaded im Zeitstrahl sind 🙂
    https://www.rarst.net/wordpress/wordpress-core-load/

    Gruß, Torsten

    Thread-Starter pezi

    (@pezi)

    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, dieses plugins_loaded wäre nur ein Schritt vor der functions.php des Childs.
    Wenn also jemand plugins_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!

Ansicht von 15 Antworten - 1 bis 15 (von insgesamt 16)
  • Das Thema „Regenerate Thumbnails weg“ ist für neue Antworten geschlossen.