WordPress의 플러그인 기능 재정의
WordPress 사이트에 플러그인이 설치되어 있습니다.
이치노내 테마에서 이것을 덮어쓸까요?functions.php
면면면면면면면면면 면면 면?
플러그인의 원래 기능은 다음과 같습니다.
/**
* sensei_start_course_form function.
*
* @access public
* @param mixed $course_id
* @return void
*/
function sensei_start_course_form( $course_id ) {
$prerequisite_complete = sensei_check_prerequisite_course( $course_id );
if ( $prerequisite_complete ) {
?><form method="POST" action="<?php echo esc_url( get_permalink() ); ?>">
<input type="hidden" name="<?php echo esc_attr( 'woothemes_sensei_start_course_noonce' ); ?>" id="<?php echo esc_attr( 'woothemes_sensei_start_course_noonce' ); ?>" value="<?php echo esc_attr( wp_create_nonce( 'woothemes_sensei_start_course_noonce' ) ); ?>" />
<span><input name="course_start" type="submit" class="course-start" value="<?php echo apply_filters( 'sensei_start_course_text', __( 'Start taking this Course', 'woothemes-sensei' ) ); ?>"/></span>
</form><?php
} // End If Statement
} // End sensei_start_course_form()
함수를 "오버라이드"할 수 없습니다.함수가 정의되어 있는 경우 함수를 재정의하거나 변경할 수 없습니다.플러그인의 복사본을 만들고 함수를 직접 변경하는 것이 가장 좋습니다.물론 플러그인을 업데이트할 때마다 이 작업을 반복해야 합니다.
플러그인에 다른 이름을 지정하여 플러그인 목록에서 플러그인을 구분합니다.원본을 무효로 하고, 복사를 유효하게 합니다.
이를 수행하려면 add_filter() 함수를 사용합니다.
단어 press stackexchange를 참조하십시오. 플러그 인을 기능으로 재정의합니다.php
코드를 .functions.php
filename을 클릭합니다.
add_filter('sensei_start_course_form','MyCustomfilter',$priority = 10, $args = 1);
function MyCustomfilter($course_id) {
// Do your logics here
}
늦은 건 알지만 혹시 다른 사람이 이 게시물을 발견하면.보다 간단한 해결책은 테마 함수 파일에 함수를 복사하고 원래 함수와 충돌하지 않도록 이름을 변경하는 것입니다.그런 다음 기존 기능 대신 새 기능을 사용합니다.이렇게 하면 변경에 영향을 주지 않고 플러그인 파일을 업데이트할 수 있습니다.
조금 늦었지만(2021년 11월) 오늘 이 답을 찾았기 때문에 지금까지 본 적이 없는 솔루션을 추가하겠습니다.
과거 몇 가지 이유로 WP는 다른 모든 플러그인보다 먼저 실행되는 "사용해야 하는" 플러그인을 추가할 수 있습니다.이를 통해 재정의할 함수를 추가할 수 있으므로 원래 플러그인이 실행될 때 이미 존재합니다.
고객님의 경우
- 합니다.
wp-content/mu-plugins
하다
wp-content/mu-plugins/custom-override.php
- 을
custom-override.php
:
if ( ! function_exists( 'sensei_start_course_form' ) ) {
function sensei_start_course_form( $course_id ) {
//your magic here
//...
}
}
- 원래 플러그인에도 "함수가 아직 존재하지 않는 경우"라는 조건이 있는지 확인하십시오.."
if ( ! function_exists( 'sensei_start_course_form' ) ) { ...
이것으로 나는 속았다;-)
저는 전문가가 아닙니다만, 뭔가 잘못되었다면 피드백을 주세요.감사해요.
참조: https://wordpress.org/support/article/must-use-plugins/
WordPress 플러그인의 코드도 변경해야 했습니다.그래서 저는 함수에 넣을 수 있는 기능을 만들었습니다.php를 사용합니다.사용하기 전에 테스트해 주세요!제가 PHP 전문가가 아니기 때문에 아마 서투른 글씨일 것입니다.근데 저는 콘셉트가 잘 맞아요.WordPress 외부에서 먼저 테스트했기 때문에 $root와 같은 일부 변수를 수정해야 합니다.
플러그인의 Email posts to subscribers에서 두 개의 다른 파일의 값을 변경해야 하는 상황이었습니다.
$home_url = home_url/')을 $home_url = 'custom-hurl-url' 및 'content="10; 'content="1;'로 변경해야 했습니다.php 및 구독 해제를 클릭합니다.php.
플러그인이 업데이트될 때마다 업데이트 후 기능이 실행됩니다.사용하는 코드는 다음과 같습니다.
// Function that replaces the code
function replace_text_plugin_email_posts_to_subscribers($pluginTargetFile, $replaceURL) {
$root = $_SERVER['DOCUMENT_ROOT'];
$replaceThis = array("\$home_url = home_url('/');", "content=\"10;");
$withThis = array($replaceURL, "content=\"1;");
$fname = $root . $pluginTargetFile;
$fhandle = fopen($fname,"r");
$content = fread($fhandle,filesize($fname));
$content = str_replace($replaceThis, $withThis, $content);
$fhandle = fopen($fname,"w");
fwrite($fhandle,$content);
fclose($fhandle);
}
//Function that runs every time that email-posts-to-subscribers is updated
function my_upgrade_function( $upgrader_object, $options ) {
$current_plugin_path_name = 'email-posts-to-subscribers/email-posts-to-subscribers.php';
if ($options['action'] == 'update' && $options['type'] == 'plugin' ) {
foreach($options['plugins'] as $each_plugin) {
if ($each_plugin==$current_plugin_path_name) {
replace_text_plugin_email_posts_to_subscribers("/wp-content/plugins/email-posts-to-subscribers/job/optin.php","\$home_url = 'https://example.com/redirect-optin';");
replace_text_plugin_email_posts_to_subscribers("/wp-content/plugins/email-posts-to-subscribers/job/unsubscribe.php","\$home_url = 'https://example.com/redirect-unsubscribe';");
}
}
}
}
add_action( 'upgrader_process_complete', 'my_upgrade_function',10, 2);
이건 사소한 것들을 조정해야 할 때만 쓸 수 있을 것 같아요.이 코드에서는 완전한 코드를 다시 쓰는 것이 동작하지 않을 수 있지만 테스트하지 않았습니다.
언급URL : https://stackoverflow.com/questions/33147735/override-plugin-function-in-wordpress
'programing' 카테고리의 다른 글
wc_admin_report에서 get_order_report_data 함수를 덮어쓰는 방법을 Word press 합니다. (0) | 2023.03.05 |
---|---|
AngularJS에 의해 생성된 선택 목록에 대한 사전 선택 방법은 무엇입니까? (0) | 2023.03.05 |
Jest URL.create ObjectURL이 함수가 아닙니다. (0) | 2023.03.05 |
useMemo vs. useEffect + useState (0) | 2023.03.05 |
Jeest expect.any()가 예상대로 작동하지 않습니다. (0) | 2023.03.05 |