2013-09-26 9 views
6

Wie der Titel liest Ich versuche, eine Funktion von einem Elternteil Thema in meinem Kind genannt zu ändern, ich weiß, dass das Kind Thema vorher eingestellt wird geladen, so bin ich gespannt wenn das überhaupt möglich ist?eine Funktion mit Kind Themen functions.php

Mein übergeordnetes Thema hat eine Funktion namens ajax_search_box(), die ich gerne ändern eine Abfrage in, und ich würde lieber nicht ändern, die übergeordneten Thema Dateien für den Fall, dass ich es auf den Weg aktualisieren muss .. was würde der beste Weg, dies zu tun?

Auch für Bonuspunkte, wie würde ich mich über diese auch mit einem Widget zu tun? Danke im Voraus!

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'); 
+1

Zeigen Sie die Funktion im Kontext an. – brasofilo

+0

die Funktion jetzt hinzugefügt. – Jassi

Antwort

5

die Mutter Thema muss, wenn (function_exists (‚ajax_search_box‘)) überprüfen und, wenn sie nicht existiert, es wird es erklären.

wenn das Thema prüft Eltern, um zu sehen, ob die Funktion vorhanden ist, dann können Sie es zuerst erklären und haben es tun, was Sie wollen.

Wenn das übergeordnete Thema nicht überprüft, mit dem Thema Autor in Verbindung setzen, um zu sehen, ob sie diese Änderung in für das nächste Update werfen .... und Code zu it yourself. Wenn das Thema aktualisiert wird, ist es immer noch gut zu gehen.

+1

Um sicherzustellen, dass ich folge, würde ich 'if (! Function_exists ('ajax_search_box')) {' um die Funktion innerhalb der elterlichen functions.php hinzufügen und sie dann in meine untergeordnete functions.php duplizieren und sie ändern ? – Jassi

+2

Ja. In Ihrem Kindthema müssen Sie nicht überprüfen, ob die Funktion existiert (außer Sie planen, es anders auf Basis von Code zu deklarieren ...) –

2

Pause frei von functions.php, write your own 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 
} 
+0

Also basierend auf dem Code, den ich oben hinzugefügt habe, wenn ich eine Aktion entfernen musste statt ein Filter (Die ajax_search_box ist als Aktion konfiguriert) Ich würde 'remove_action ('wp_ajax_ajax_search_box', 'ajax_search_box') verwenden;' und dann eine Funktion/add_filter erstellen und den Code dort eingeben? Ich versuche mein Bestes, um das zu verstehen, danke! – Jassi