codememo

WordPress 핵심 기능을 덮어쓰려면 어떻게 해야 합니까?

tipmemo 2023. 2. 8. 17:55
반응형

WordPress 핵심 기능을 덮어쓰려면 어떻게 해야 합니까?

WordPress는 처음 만져보는 것으로, 커스터마이즈된 핵심 기능을 추출하여 업그레이드 시 유지보수가 용이하도록 비코어 파일에 넣는 작업이 있습니다.에서는 예를 들어 보겠습니다.wp-admin/includes/template.php:

원래 코드:

    function meta_form() {
        global $wpdb;
        $limit = (int) apply_filters( 'postmeta_form_limit', 30 );
        $keys = $wpdb->get_col( "
            SELECT meta_key
            FROM $wpdb->postmeta
            GROUP BY meta_key
            HAVING meta_key NOT LIKE '\_%'
            ORDER BY meta_key
            LIMIT $limit" );
        if ( $keys )
            natcasesort($keys);
    ?>

커스터마이즈된 버전:

function meta_form() {
    global $wpdb;

  if ( isset($_GET['post']) )
    $post_id = (int) $_GET['post'];
  elseif ( isset($_POST['post_ID']) )
    $post_id = (int) $_POST['post_ID'];
  else
    $post_id = 0;

  if ( $post_id ) {
    $post_ = get_post($post_id);

  }

  if ($post_->post_type == 'video_photo' ){
    $limit = (int) apply_filters( 'postmeta_form_limit', 30 );
    $keys = $wpdb->get_col( "
        SELECT meta_key
        FROM $wpdb->postmeta
    where meta_key like 'tqmcf_%'
        GROUP BY meta_key
        HAVING meta_key NOT LIKE '\_%'
        ORDER BY meta_key
        LIMIT $limit" );
  }else{
    $limit = (int) apply_filters( 'postmeta_form_limit', 30 );
    $keys = $wpdb->get_col( "
        SELECT meta_key
        FROM $wpdb->postmeta

        GROUP BY meta_key
        HAVING meta_key NOT LIKE '\_%'
        ORDER BY meta_key
        LIMIT $limit" );
  }

    if ( $keys )
        natcasesort($keys);
?>

의 '서'를 요?meta_form()핵심 메서드를 덮어쓰는지 확인하는 기능

WordPress에서는 코어 전체를 표시할 수 없습니다.WordPress Core를 수정하는 방법에는 다음 두 가지가 있습니다.

첫 번째 옵션: 플러그 가능 함수

일부 함수는 재정의할 수 있습니다.테마의 '이렇게 하다'에서 할 수요.functions.php파일 또는 플러그인 파일에 있습니다.Pluggable Functions 목록을 확인할 수 있습니다.

두 번째 옵션 : 필터 및 액션훅

  • 필터 후크는 코어 WordPress 프로세스 내에서 변수를 수정하는 데 사용할 수 있습니다.
  • 액션 후크를 사용하여 일부 이벤트에서 커스텀 기능을 실행할 수 있습니다.

주의 1 : 테마 또는 플러그인에 독자적인 필터와 액션 훅을 작성할 수 있습니다.

주의 2 : 편리한 액션 훅이 없는 경우 필터 훅을 사용하여 기능을 실행할 수 있습니다.

WordPress 코딩 표준을 따르면 WordPress의 동작을 크게 수정할 수 있습니다.

표시된 기능에서는 다음과 같은 작업을 수행하려면 post_where 필터 후크를 찾아야 합니다.

add_filter( 'posts_where' , 'my_posts_where' );

function my_posts_where( $where ) {

    global $post;

    if ($post->post_type == 'video_photo' ){
        $where .= " AND meta_key like 'tqmcf_%'";
    }

    return $where;
}

편집 1: 이 특정 쿼리를 대상으로 삼기 어려운 경우에도 다음 사항이 더 적합합니다.

add_filter( 'query' , 'my_meta_form_query' );

function my_meta_form_query( $query ) {

    $pattern = "/SELECT(?:\W*)meta_key(?:\W*)FROM (.*)(?:\W*.*?)*LIMIT(?:\W*)([0-9]*)/g";

    if( preg_match($pattern, $query, $vars) ) {
        $postmeta = $vars[1];
        $limit = $vars[2];

        $query = "SELECT meta_key
                FROM $postmeta
                WHERE meta_key like 'tqmcf_%'
                GROUP BY meta_key
                HAVING meta_key NOT LIKE '\_%'
                ORDER BY meta_key
                LIMIT $limit";
    }

    return $query;
}

적절한 훅과 최적의 변수 필터링 방법을 찾기 위해 코드를 조사해야 합니다.예에서는 가 의 하는지 여부를 합니다.meta_form() 하여 새로운 .WHERE i 이 코드는 코드를 변경하는 방법을 알 수 .이 코드를 테스트하지 않았고 버그가 있을 수 있지만 코어 코드를 변경하는 방법을 알 수 있습니다.

에서 정의하지 않는 한 핵심 기능을 대체할 수 없습니다.

가능한 경우 후크를 사용하여 값 및 프로세스를 수정할 수 있습니다(주로 다음 항목에 있습니다).apply_filters ★★★★★★★★★★★★★★★★★」do_action코어 파일내의 기능).IMO, WordPress Answers에는 더 많은 전문가와 지식 베이스가 있지만 최종 결과에 집중할 것을 제안합니다. 왜냐하면 당신은 다음 웹 사이트에 접속할 수 있기 때문입니다.wpdb또는postmeta예를 들어 쿼리입니다.
샘플 코드에서는 무엇을 달성하려고 하는지는 명확하지 않지만 사용 가능한 필터 후크만 적절하지 않은 것 같기 때문에 다른 후크 및 클리어 목표가 필요합니다.

결국 WordPress 동작을 수정하는 적절한 방법은 플러그인 API를 사용하는 것입니다.

대체하고 싶은 WP 기능의 이름을 알고 있는 경우는, 테마 기능에 이런 것을 넣어 주세요.php 파일:

function my_new_function () {
/* Your replacement code.... */
}

remove_filter (the_content, old_wp_function);
add_filter (the_content, my_new_function);

여기서 'the_content'는 투고의 전체 콘텐츠입니다.예를 들어 Wordpress의 wptexturize() 함수를 자신의 따옴표로 바꿀 수 있습니다.[WP 기능을 전혀 사용하지 않으려면 위의 remove_filter 문을 사용하십시오]

코어 파일을 편집하고 if(!function_exists...)를 추가한 후 함수를 복사하여 편집하는 것이 좋습니다.php 파일.

업그레이드 시 두 번 선언된 모든 함수의 오류가 표시되지만 if(!function_exists...)를 통해 쉽게 광고를 할 수 있습니다.

언급URL : https://stackoverflow.com/questions/17201646/how-do-i-overwrite-wordpress-core-functions

반응형