想要更改类中函数的简单字符串。更具体地说,我只想将最后一个函数中的“%s”更改为硬编码的URL,例如“https://whatever.com”。
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 );
我是否应该覆盖原始功能和/或我的方法是否正确?
答案 0 :(得分:0)
此处的一个选项是添加过滤器而无需修改任何代码。
add_filter( 'woocommerce_add_success', 'your_function_name' );
function your_function_name($message) {
$string_to_search = ' to claim this listing.';
if( FALSE === strpos( $message, $string_to_search) ) {
return $message;
}
return 'Please <a href="https://directory.supportpay.com/my-account/">log in or register</a> to claim this listing.';
}
您可以根据要使其生效的页面添加if语句,从而进一步提高准确性。
此外,在您的两次尝试中,sprintf
语法都不正确。
你原来的:
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 ) ) ) );
应该是:
wc_add_notice( sprintf( __( 'Please <a href="%s">log in</a> to claim this listing.', 'wp-job-manager-claim-listing' ), "https://directory.supportpay.com/my-account/" ) );