6

正如标题所示,我正在尝试修改我孩子的父主题调用的函数,我知道子主题已设置为预先加载,所以我很好奇这是否可能?

我的父主题有一个名为 ajax_search_box() 的函数,我想在其中修改查询,并且我宁愿不修改父主题文件,以防我需要在以后更新它.. 什么是最好的方法去做这个?

此外,对于奖励积分,我将如何使用小部件来执行此操作?提前致谢!

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' ); 
4

2 回答 2

5

父主题需要检查 if(function_exists('ajax_search_box')) 如果它不存在那么它将声明它。

如果父主题检查该函数是否存在,那么您可以先声明它并让它执行您想要的操作。

如果父主题没有检查,请与主题作者联系,看看他们是否会在下一次更新中加入该更改......并自己编写代码。这样,当主题更新时,您仍然可以继续使用。

于 2013-09-27T15:24:13.700 回答
2

挣脱束缚functions.php编写自己的插件

<?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
}
于 2013-09-27T20:08:35.110 回答