programing

하위 테마 함수로 함수를 재정의합니다.php

muds 2023. 10. 28. 08:21
반응형

하위 테마 함수로 함수를 재정의합니다.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

반응형