1
クラス内の関数内の単純な文字列を変更したい。具体的には、最後の機能の "%s"を "https://whatever.com"のようなハードコードされたURLに変更したいだけです。WordPressプラグインで既存のクラスのメソッド/関数を変更する
class WPJMCL_Claim_Free {
public function __construct() {
add_action('template_redirect', array($this, 'create_claim'));
add_action('template_redirect', array($this, 'display_guest_notice')); // I WANT TO CHANGE THIS ONE
}
public function create_claim() {
// CODE I DON'T CARE ABOUT
}
public function display_guest_notice() {
if (! isset($_GET[ 'action' ]) || 'claim_as_guest' != $_GET[ 'action' ]) {
return;
}
if (! isset($_GET[ 'listing_id' ])) {
return;
}
$listing_id = absint($_GET[ 'listing_id' ]);
// Add a notice if the theme is using WC
if (defined('WC_VERSION')) {
wc_add_notice(sprintf(__('Please <a href="%s">log in</a> to claim this listing.', 'wp-job-manager-claim-listing'), wp_login_url(get_permalink($listing_id))));
}
do_action('wpjmcl_guest_claim_redirect', $listing_id);
}
}
私は別のplugin.phpファイルとしてクラスを拡張しようとしましたが、私が欲しいの出力は、一度元のクラスの出力と鉱山を持つ別として、二回起こります。
マイ拡張子:
add_action('init', 'claim_redirect_mods_loader', 0);
function claim_redirect_mods_loader() {
if(class_exists('WPJMCL_Claim_Free')){
class my_WPJMCL_Claim_Free extends WPJMCL_Claim_Free {
public function __construct() {
add_action('template_redirect', array($this, 'display_guest_notice'));
}
public function display_guest_notice() {
if (! isset($_GET[ 'action' ]) || 'claim_as_guest' != $_GET[ 'action' ]) {
return;
}
if (! isset($_GET[ 'listing_id' ])) {
return;
}
$listing_id = absint($_GET[ 'listing_id' ]);
// Add a notice if the theme is using WC
if (defined('WC_VERSION')) {
wc_add_notice(sprintf(__('Please <a href="https://directory.supportpay.com/my-account/">log in or register</a> to claim this listing.', 'wp-job-manager-claim-listing'), wp_login_url(get_permalink($listing_id))));
}
do_action('wpjmcl_guest_claim_redirect', $listing_id);
}
} // End Class
new my_WPJMCL_Claim_Free();
} // End if
}
代わりにクラスを拡張する、私はちょうど元のクラスの中に、元の関数を変更したい考え出したが(私のフィルタが構文的に正しいかどうかわからない
私のfunctions.phpファイル):
global $WPJMCL_Claim_Free;
function my_display_guest_notice(){
if (! isset($_GET[ 'action' ]) || 'claim_as_guest' != $_GET[ 'action' ]) {
return;
}
if (! isset($_GET[ 'listing_id' ])) {
return;
}
$listing_id = absint($_GET[ 'listing_id' ]);
// Add a notice if the theme is using WC
if (defined('WC_VERSION')) {
wc_add_notice(sprintf(__('Please <a href="https://directory.supportpay.com/my-account/">log in or register</a> to claim this listing.', 'wp-job-manager-claim-listing'), wp_login_url(get_permalink($listing_id))));
}
do_action('wpjmcl_guest_claim_redirect', $listing_id);
}
add_filter('display_guest_notice', array($WPJMCL_Claim_Free, 'my_display_guest_notice'), 999);
元の関数を上書きする必要がありますか、私のアプローチが正しいのでしょうか?