Ondersteuning » Code oplossingen gezocht » Hoe vervang je een plugin-functie?

  • Opgelost bxwebber

    (@bxwebber)


    Hallo!

    Hopelijk kan iemand helpen bij het volgende:
    Ik wil een specifieke plugin-functie vervangen m.b.v. de functions.php in mijn child thema, maar kom er niet helemaal uit: wat moet precies waar? De plugin is de Tiled Gallery van Slim Jetpack (2.3.3).

    In het originele .js file is dit het deel dat ik wil vervangen:

    TiledGallery.prototype.Captions = function() {
    	/* Hide captions */
    	this.caption.hide();
    
    	this.item.on( 'hover', function() {
    		$( this ).find( '.tiled-gallery-caption' ).slideToggle( 'fast' );
    	});
    };

    Dat moet vervangen worden door:

    TiledGallery.prototype.Captions = function() {
    	/* Hide captions */
    	this.caption.hide();
    
    	this.item.hover(
    		function() { $( this ).find( '.tiled-gallery-caption' ).slideDown( 'fast' ); },
    		function() { $( this ).find( '.tiled-gallery-caption' ).slideUp( 'fast' ); }
    	);
    	this.item.click(
    		function() { $( this ).find( '.tiled-gallery-caption' ).slideUp( 'fast' ); }
    	);
    };

    Verschillende artikelen over dit onderwerp die ik tegenkwam zijn best verwarrend. Ik weet eigenlijk te weinig van scripts.
    Uiteraard wil ik het originele .js file niet wijzigen i.v.m. toekomstige updates.

    Dankjewel!

7 reacties aan het bekijken - 1 tot 7 (van in totaal 7)
  • Bij een thema had je een ‘child theme’ gemaakt, het lijkt erop dat dit voor plugins nog niet is geregeld in WP, maar er zijn wel mensen die er oplossingen voor hebben bedacht zo lijkt het. Zoek eens op “wordpress child plugin” en je vindt een paar draadjes die over het onderwerp gaan op Stackexchange.

    Thread starter bxwebber

    (@bxwebber)

    Hi Roy, dank voor je reactie!

    ja, ik heb al heel veel afgezocht. Het probleem is dat ik het gebruik van ‘hooks’ en ‘filters’, functie-benamingen en de juiste syntax niet helemaal kan volgen en vertalen naar dit specifieke geval. Ben echt nog een leek op jQuery gebied…

    Het zou fijn zijn als iemand me precies kan zeggen wat precies waar moet…

    Als de plugin auteur hier geen rekening mee heeft gehouden is het bijna niet te doen om een gedeelte van de functionaliteit te vervangen. Je kan het hacken maar de kans dat het breekt bij een update is groot.

    Beste optie: Je kan een kopie(fork) maken van de plugin (dat mag gewoon met de licentie voorwaarden van WordPress)

    Zorg er wel voor dat je hem aanpast zodat hij wordt gezien als een nieuwe (eigen) plugin.

    Of je prikt hier vanuit je functions.php in en vervangt enkel tiled-gallery.js met je eigen versie:

    public function default_scripts_and_styles() {
    		wp_enqueue_script( 'tiled-gallery', plugins_url( 'tiled-gallery/tiled-gallery.js', __FILE__ ), array( 'jquery' ) );
    wp_enqueue_style( 'tiled-gallery', plugins_url( 'tiled-gallery/tiled-gallery.css', __FILE__ ), array(), '2012-09-21' );
    	}

    Door

    class Jetpack_Tiled_Gallery

    uit te breiden.

    Maar het is eenvoudiger om een eigen fork te maken van de plugin.

    Thread starter bxwebber

    (@bxwebber)

    Hoi Mike,

    Die oplossingen was ik nog niet tegengekomen!

    Je tweede tip klinkt het aantrekkelijkst. Hoe werkt die precies? Wat ik geprobeerd heb in de functions.php:

    public function default_scripts_and_styles() {
    		wp_enqueue_script( 'tiled-gallery', plugins_url( 'tiled-gallery/tiled-gallery.js', __FILE__ ), array( 'jquery' ) );
    wp_enqueue_style( 'tiled-gallery', plugins_url( 'tiled-gallery/tiled-gallery.css', __FILE__ ), array(), '2012-09-21' );
    
    class Jetpack_Tiled_Gallery {
    
    /*** hier de volledige js-code van Tiled Gallery ***/
    
    }
    }

    maar dat werkte niet…

    Moet dat eerste stukje code (public function…etc) in functions.php van m’n child theme? Het tweede stukje ‘class Jetpack_Tiled_Gallery’ kan ik niet thuis brengen… waar moet dat komen en hoe hang je daar dan de js-code van de tiled gallery aan?

    Een kopie van de plugin: ik lees hier en daar dat het juist wordt afgeraden omdat het nogal wat aanpassingen vraagt i.v.m. het functioneren van de database…

    Zoals ik al schreef ben ik een newbie wat betreft jQuery/scripts…

    Ik zou voor optie 1 gaan. Optie 2 is een stuk complexer en levert in deze situatie onvoldoende voordeel voor de tijd die in de oplossing gaat zitten.

    Thread starter bxwebber

    (@bxwebber)

    Hoi Mike,

    Voorlopig doe ik het even met een aanpassing van het originele .js in de plugin en het achterwege laten van eventuele updates (heeft deze sowieso niet zo vaak). Het is me op dit moment te ingewikkeld en te tijdrovend. Zoek ik later nog wel eens een alternatief. Dat van die plugin-kopie hou ik zeker in gedachte.

    Dankjewel!

7 reacties aan het bekijken - 1 tot 7 (van in totaal 7)
  • Het onderwerp ‘Hoe vervang je een plugin-functie?’ is gesloten voor nieuwe reacties.