首页 > 解决方案 > 使用 PHP 更改其他插件函数中的变量值

问题描述

我尝试更改一个类,该类存储在一个变量中,而不对插件文件进行任何更改。我不确定如何在函数内定位变量。

这是函数:function learndash_mark_complete( $post, $atts = array() ) {在这个函数内部,有一个名为 的变量$button_class

if ( isset( $atts['button']['class'] ) ) {
    $button_class = ' class="learndash_mark_complete_button ' . esc_attr( $atts['button']['class'] ) . '" ';
} else {
    $button_class = ' class="learndash_mark_complete_button" ';
}

有没有一种简单的方法可以将代码更改为..

if ( isset( $atts['button']['class'] ) ) {
    $button_class = ' class="myclass' . esc_attr( $atts['button']['class'] ) . '" ';
} else {
    $button_class = ' class="myclass" ';
}

无需更改插件文件。也许在functions.php或单独的(新)插件中创建一个函数?

我在互联网上看到有关 的文章add_filter,但我不确定如何在不擦除整个功能的情况下定位我需要的部分。

我知道我可以用 jQuery 之类的东西来改变类,也许它应该容易得多,但我喜欢学习新东西。

标签: phpwordpressfunction

解决方案


如果插件不提供过滤器挂钩来更改类名,那么您不能过滤值。

但是,如果您正在编写自己的插件,那么您可以使用这种类型的逻辑来更改值,而无需触及原始源。

这段代码应该在插件文件中,

$arrayToFilter = array(
    'class_name' => 'learndash_mark_complete_button',
    'key1' => 'value1', // So on
 );
$value = apply_filters( 'change_class', $arrayToFilter ); 
if ( isset( $atts['button']['class'] ) ) {
    $button_class = ' class="'.$value['class_name'].'' . esc_attr( $atts['button']['class'] ) . '" ';
} else {
    $button_class = ' class="'.$value['class_name'].'" ';
}

并将这个过滤器添加到主题functions.php文件中以修改change_class钩子的值

function example_callback($args) {
    // Here you can get $arrayToFilter as $args 
    $args['class_name'] = 'myclass';
    return $args;
}
add_filter( 'change_class', 'example_callback',10 , 1 ); // Where $priority is 10, $accepted_args is 1.

我希望你对 add_filter() 有基本的了解。


推荐阅读