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 목록을 확인할 수 있습니다.
두 번째 옵션 : 필터 및 액션훅
주의 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
'codememo' 카테고리의 다른 글
| PHP 루프:세 항목 구문 주위에 div를 추가합니다. (0) | 2023.02.08 |
|---|---|
| Angular.js 지시어에서 ng는 무엇을 나타냅니까? (0) | 2023.02.08 |
| Angular의 객체 배열에서 ID별로 특정 객체 가져오기JS (0) | 2023.02.08 |
| [객체] 대신 Handlebars.js가 오브젝트 데이터를 렌더링해야 합니다. (0) | 2023.02.08 |
| JSON Schema를 사용하여 두 필드 중 하나를 요구하는 방법 (0) | 2023.02.08 |