WordPress : Remplacer une fonction par des thèmes enfants functions.php

Publié par Jean-Michel le

Comme le titre lit J’essaie de modifier une fonction appelée par un thème parent dans mon enfant, je sais que le thème enfant est configuré pour être chargé à l’avance, donc je suis curieux de savoir si cela est même possible?

Mon thème parent a une fonction appelée ajax_search_box() dans laquelle j’aimerais modifier une requête, et je préfère ne pas modifier les fichiers du thème parent au cas où j’aurais besoin de le mettre à jour plus tard.. quelle serait la meilleure façon pour faire ça?

De plus, pour les points bonus, comment ferais-je également avec un widget ? Merci d’avance!

function SearchFilter($query) {
    // If 's' request variable is set but empty
    if (isset($_GET['s']) && empty($_GET['s']) && $query->is_main_query()){
        $query->is_search = true;
        $query->is_home = false;
    }
    return $query;
}

add_filter('pre_get_posts','SearchFilter');

function ajax_search_box() {
    if (isset($_GET["q"]))
    {
        $q = $_GET["q"];
        global $wpdb;
        $q = mysql_real_escape_string($q);
        $q = $wpdb->escape($q);

        $query = array(
            'post_status' => 'publish',
            'order' => 'DESC',
            's' => $q
        );

        $get_posts = new WP_Query;
        $posts = $get_posts->query( $query );

        // Check if any posts were found.
        if ( ! $get_posts->post_count )
            die();

        //Create an array with the results
        foreach ( $posts as $post )
            echo $post->post_title . "|" . $post->ID . "n";
    }
    die();
}
// creating Ajax call for WordPress
add_action( 'wp_ajax_nopriv_ajax_search_box', 'ajax_search_box' );
add_action( 'wp_ajax_ajax_search_box', 'ajax_search_box' );

Solution n°1 trouvée

Libérez-vous de functions.php, écrivez votre propre plugin.

<?php
/**
 * Plugin Name: Manipulate the Parent
 * Requires: PHP5.3+
 */

add_action( 'after_setup_theme', function()
{
    remove_filter( 'pre_get_posts','SearchFilter' );
    // now add your own filter
    add_filter( 'pre_get_posts', 'your_callback_for_your_filter' );
});

function your_callback_for_your_filter()
{
     // do stuff
}

Solution n°2 trouvée

le thème parent doit vérifier if(function_exists(‘ajax_search_box’)) et s’il n’existe pas, il le déclarera.

Si le thème parent vérifie si la fonction existe, vous pouvez d’abord la déclarer et lui faire faire ce que vous voulez.

Si le thème parent ne vérifie pas, contactez l’auteur du thème pour voir s’il apportera ce changement pour la prochaine mise à jour… et codez-le vous-même également. De cette façon, lorsque le thème sera mis à jour, vous serez toujours prêt à partir.

Catégories : Wordpress

0 commentaire

Laisser un commentaire

Avatar placeholder

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *