Ondersteuning » Overige » Child van een thema en functions.php

  • Omdat ik WordPress én het basisthema TwentyTen 100% origineel wil laten, heb ik een child van TwentyTen gemaakt. Zoals bekend vervangt functions.php van de child niet de gelijknamige van de parent, maar wordt eerst gelezen en daarna ook de function.php van de parent. Dat heeft voordelen maar ook een nadeel. Ik geef een voorbeeld aan de hand van het instellen van het aantal woorden van een samenvatting (excerpt).
    In functions.php van parent TwentyTen staat:
    **
    function twentyten_excerpt_length( $length ) {
    return 40;
    }
    add_filter( ‘excerpt_length’, ’twentyten_excerpt_length’ );
    **
    De functie verandert de standaard waarde van 55 in 40.
    Wanneer ik in mijn child een functie plaats die de waarde naar 86 aanpast dan werkt dat niet want wordt vervolgens door de parent weer aangepast naar 40.
    Omdat ik header.php in mijn child toch al aangepast had heb ik daar helemaal bovenaan een regel toegevoegd
    **
    require_once( get_stylesheet_directory(). ‘/includes-famplaza3c.php’ );
    **
    In die includes-famplaza3c.php heb ik een functie geplaatst die de waarde op 86 zet. En dat werkt wel want deze functie wordt na de twee functions.php gelezen.

    Mijn vraag: dit lijkt me niet de aangewezen methode of toch?
    Ik kan dat niet goed in de codex vinden. Nogmaals ik wil geen enkele file van de parent zelf aanpassen.

8 reacties aan het bekijken - 1 tot 8 (van in totaal 8)
  • De oplossing staat in de functions.php van Twenty Ten, een uittreksel:

    * <code>
     * add_action( 'after_setup_theme', 'my_child_theme_setup' );
     * function my_child_theme_setup() {
     *     // We are providing our own filter for excerpt_length (or using the unfiltered value)
     *     remove_filter( 'excerpt_length', 'twentyten_excerpt_length' );
     *     ...
     * }
     * </code>
    Thread starter matjas

    (@matjas)

    Dan moet ik op de parent functions.php ingrijpen en dat wil ik nu juist niet.

    Nee, die code gaat in de functions.php van je child theme:

    function matjas_child_theme_setup() {
        remove_filter( 'excerpt_length', 'twentyten_excerpt_length' );
    }
    add_action( 'after_setup_theme', 'matjas_child_theme_setup' );
    Thread starter matjas

    (@matjas)

    Ja, je hebt helemaal gelijk.
    Begrijp alleen de remove functie niet zo goed. Definieer je de functie na de remove opnieuw dan blijft WP mekkeren dat de functie al gedefinieerd is.
    Definieer ik hem met een andere naam, dan werkt het wel, maar ook zonder remove.
    Op onderstaande krijg ik die foutmelding
    **
    function famplaza3c_child_theme_setup(){
    remove_filter( ‘excerpt_length’, ’twentyten_excerpt_length’ );
    function twentyten_excerpt_length( $length ) {
    return 86;
    }
    add_filter( ‘excerpt_length’, ’twentyten_excerpt_length’ );
    }
    add_action( ‘after_setup_theme’, ‘famplaza3c_child_theme_setup’ );
    **

    Je kan de functie niet herdefiniëren omdat hij niet pluggable is, dwz niet gewikkeld in een function_exists conditional. De excerpt_length filter kan natuurlijk bespeeld worden door verschillende functies, in je theme, childtheme en plugins. Met de remove functie verwijder je enkel wat je specifiëert (in het voorbeeld hierboven de twentyten_excerpt_length functie).

    Thread starter matjas

    (@matjas)

    Je kan de functie niet herdefiniëren omdat hij niet pluggable is, dwz niet gewikkeld in een function_exists conditional
    Dit was me duidelijk, want dat gebeurt in de parent.

    Met de remove functie verwijder je enkel wat je specifiëert (in het voorbeeld hierboven de twentyten_excerpt_length functie).
    Dit dus niet. Wanneer je twentyten_excerpt_length functie verwijdert, dan kan je hem toch weer opnieuw definieren?

    Neen, want je hebt de functie niet verwijderd, enkel losgekoppeld van de filter 🙂

    Thread starter matjas

    (@matjas)

    ah dus toch zoals ik dacht. wanneer je toch een nieuwe functie definieert en een nieuw filter toevoegt, dan is het removen van het oude filter niet noodzakelijk. hoe dan ook: bedankt voor het antwoord op mijn oorspronkelijke vraag!

8 reacties aan het bekijken - 1 tot 8 (van in totaal 8)
  • Het onderwerp ‘Child van een thema en functions.php’ is gesloten voor nieuwe reacties.