반응형
하위 테마 함수로 함수를 재정의합니다.php
제목에 쓰여 있듯이 자녀의 부모 테마라는 기능을 수정하려고 하는데, 자녀 테마가 미리 로드되도록 설정되어 있는 것으로 알고 있는데 이게 가능한지 궁금합니다.
제 부모 테마에는 쿼리를 수정하고 싶은 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' );
부모 테마는 (function_exists('ajax_search_box')를 확인해야 하며 만약 존재하지 않는다면 선언합니다.
상위 테마가 함수가 존재하는지 확인하는 경우 먼저 함수를 선언하고 원하는 작업을 수행하도록 할 수 있습니다.
상위 테마가 확인되지 않으면 테마 작성자에게 연락하여 다음 업데이트를 위해 변경 내용을 입력할지 확인하고 직접 코딩합니다.그렇게 하면 테마가 업데이트될 때도 갈 수 있을 것입니다.
에서 벗어남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
}
언급URL : https://stackoverflow.com/questions/19039492/override-a-function-with-child-themes-functions-php
반응형
'programing' 카테고리의 다른 글
Angular cli - ng serve 시 자동 재로드를 비활성화하는 방법 (0) | 2023.11.02 |
---|---|
알 수 없는 공급자: $rootscopeProvider <- $rootscope (0) | 2023.11.02 |
문자열을 찾을 수 없는 이유는 무엇입니까? (0) | 2023.10.28 |
angular.js: 모델 업데이트가 보기 업데이트를 트리거하지 않습니다. (0) | 2023.10.28 |
jQuery 드래그 앤 드롭으로 클릭 이벤트 방지 (0) | 2023.10.28 |