在某个网站中,直接调用以下函数:
<div class="entry-meta">
<?php sparkling_posted_on(); ?>
因此定义了函数:
if ( ! function_exists( 'sparkling_posted_on' ) ) :
function sparkling_posted_on() {
$time_string = '<time class="entry-date published" datetime="%1$s">%2$s</time>';
if ( get_the_time( 'U' ) !== get_the_modified_time( 'U' ) ) {
$time_string .= '<time class="updated" datetime="%3$s">%4$s</time>';
}
$time_string = sprintf( $time_string,
esc_attr( get_the_date( 'c' ) ),
esc_html( get_the_date() ),
esc_attr( get_the_modified_date( 'c' ) ),
esc_html( get_the_modified_date() )
);
printf( '<span class="posted-on"><i class="fa fa-calendar"></i> %1$s</span><span class="byline"> <i class="fa fa-user"></i> %2$s</span>',
sprintf( '<a href="%1$s" rel="bookmark">%2$s</a>',
esc_url( get_permalink() ),
$time_string
),
sprintf( '<span class="author vcard"><a class="url fn n" href="%1$s">%2$s</a></span>',
esc_url( get_author_posts_url( get_the_author_meta( 'ID' ) ) ),
esc_html( get_the_author() )
)
); } endif;
如何在不能更改原始代码的情况下阻止该功能运行,或使其无法返回值(即只能添加更多的外部代码)。
我试图使用以下内容,但它没有任何效果:
add_filter('sparkling_posted_on', '__return_false', 100);
注意:这是在WordPress网站上进行的。然而,Wordpress SE建议将这些与一般PHP实践相关的问题发布在SO上。
我的目标是基本上阻止此功能显示博客帖子的元数据(作者/日期),而无法控制主题的原始代码。
答案 0 :(得分:1)
如您所见,当定义函数时,您有这个条件:
if ( ! function_exists( 'sparkling_posted_on' ) ) :
这基本上表示只有在之前没有定义的情况下它才会定义函数。
所以,基本上,你只需要做
function sparkling_posted_on() {}
在其他地方之前在代码中达到该点,并且您将覆盖该函数(并且不会做任何事情)。
我假设该功能是在主题functions.php
中定义的,因此要覆盖而不触及该代码,您有两种可能性:
创建child theme,并覆盖该主题中的函数。 (尽管如此,将应用父主题的更新,这是儿童主题的吸引力的一部分)
创建plugin来定义该功能,因为插件是在主题之前加载的。
两者都不应该做太多工作。插件可能(稍微)更简单。
例如:这是一个可以覆盖函数的最小表达式插件:
<?php
/*
Plugin Name: Sparkling Override
Description: Overrides "sparkling_posted_on()", defined in Such Theme
Version: XP
*/
if ( ! function_exists( 'sparkling_posted_on' ) ) :
function sparkling_posted_on() {}
endif;
答案 1 :(得分:-1)
您可能需要使用 remove_action 功能。
<?php
//put this in your theme's functions.php
//returns @bool
remove_action('init', 'sparkling_posted_on');
?>
来源:https://codex.wordpress.org/Function_Reference/remove_action