正如标题所示,我正在尝试修改我孩子的父主题调用的函数,我知道子主题设置为预先加载,所以我很好奇这是否可能?
我的父主题有一个名为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' );
答案 0 :(得分:5)
父主题需要检查是否(function_exists('ajax_search_box')),如果它不存在则会声明它。
如果父主题检查该功能是否存在,那么您可以先声明它并让它做你想做的事。
如果父主题没有检查,请与主题作者联系,看看他们是否会在下次更新时抛出该更改....并自行编码。这样当主题更新时,你仍然可以继续。
答案 1 :(得分:2)
取消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
}