php - 使用 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 之类的东西来改变类,也许它应该容易得多,但我喜欢学习新东西。
解决方案
如果插件不提供过滤器挂钩来更改类名,那么您不能过滤值。
但是,如果您正在编写自己的插件,那么您可以使用这种类型的逻辑来更改值,而无需触及原始源。
这段代码应该在插件文件中,
$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() 有基本的了解。
推荐阅读
- python - Better method to iterate over 3 lists
- javascript - react form onChange to update state
- jenkins - 强制 Jenkins 在同一个节点上运行触发的作业
- java - Problem with Java GridLayout and adding Buttons
- node.js - Check if all elements present in an array
- python - Python: How do I use variables in a string pulled from a json file?
- php - 在 localhost 上建立 WebSocket 连接
- python-3.x - rpyc,如何处理断开连接和重新连接
- node.js - 共享 NodeJS 和浏览器库?DOMParser => dom-parser 和 createNodeIterator => dom-node-iterator
- php - How to iterate over an objects's field retrieved from database using php, and modify the field?