使用 apply_filter 传递给另一个函数的对象值
Use object values passed into another function with apply_filter
首先,我要做的是插入一个 html 标签,然后我可以用 css 定位。
这是我必须使用的当前 html:
<p>
<a href="https://account.danijohnson.com/members/rebecca-deacetis/">Rebecca DeAcetis</a>
posted an update in the group
<a href="https://account.danijohnson.com/bb-groups/creating-a-dynasty-november-2020/">Creating a Dynasty™ November 2020</a>
<a href="https://account.danijohnson.com/activity/p/6965/" class="view activity-time-since">.
<span class="time-since">2 days ago</span>
</a>
</p>
我想要的是用 <span class="activity-action"></span>
包裹“在组中发布更新”
创建 html 的插件函数是:
/**
* Format groups 'activity_update' activity actions.
*
* @since BuddyBoss 1.1.9
*
* @param string $action Static activity action.
* @param object $activity Activity data object.
* @return string
*/
function bp_groups_format_activity_action_activity_update( $action, $activity ) {
$user_link = bp_core_get_userlink( $activity->user_id );
$group = groups_get_group( $activity->item_id );
$group_link = '<a href="' . esc_url( bp_get_group_permalink( $group ) ) . '">' . esc_html( $group->name ) . '</a>';
$action = sprintf( __( '%1$s posted an update in the group %2$s', 'buddyboss' ), $user_link, $group_link );
/**
* Filters the groups 'activity_update' activity actions.
*
* @since BuddyBoss 1.1.9
*
* @param string $action The groups 'activity_update' activity actions.
* @param object $activity Activity data object.
*/
return apply_filters( 'bp_groups_format_activity_action_activity_update', $action, $activity );
}
我试过将它添加到我的主题中 functions.php:
function add_span_to_timeline_action($action) {
$action = sprintf( '%1$s<span class="activtiy-action"> posted in the group %2$s</span>', $user_link, $group_link );
return $action;
}
add_filter('bp_groups_format_activity_action_activity_update','add_span_to_timeline_action');
它确实更新了 html 并添加了 <span>
标签,但是 <a>
元素不起作用,因为 $user_link 和 $group_link我的函数中没有定义变量。
我不知道如何使 $activity 对象在我的函数中可用,以便我可以定义 link 变量。
我知道用 javascript/jquery 完成我想要的 css 但我不想依赖它,因为 activity 在页面上加载并用 ajax 更新所以我必须有一个 setTimeout setInterval 以便 activity 加载,这将导致页面在加载后更新。
原始过滤器传递 $activity
变量,因此您也可以访问它:
function add_span_to_timeline_action($action, $activity) {
$user_link = bp_core_get_userlink( $activity->user_id );
$group = groups_get_group( $activity->item_id );
$group_link = '<a href="' . esc_url( bp_get_group_permalink( $group ) ) . '">' . esc_html( $group->name ) . '</a>';
$action = sprintf( '%1$s<span class="activity-action"> posted in the group %2$s</span>', $user_link, $group_link );
return $action;
}
add_filter('bp_groups_format_activity_action_activity_update','add_span_to_timeline_action', 10, 2);
只需确保更新 add_filter
上的参数计数(10 - 优先级,2 - 参数计数)
首先,我要做的是插入一个 html 标签,然后我可以用 css 定位。
这是我必须使用的当前 html:
<p>
<a href="https://account.danijohnson.com/members/rebecca-deacetis/">Rebecca DeAcetis</a>
posted an update in the group
<a href="https://account.danijohnson.com/bb-groups/creating-a-dynasty-november-2020/">Creating a Dynasty™ November 2020</a>
<a href="https://account.danijohnson.com/activity/p/6965/" class="view activity-time-since">.
<span class="time-since">2 days ago</span>
</a>
</p>
我想要的是用 <span class="activity-action"></span>
创建 html 的插件函数是:
/**
* Format groups 'activity_update' activity actions.
*
* @since BuddyBoss 1.1.9
*
* @param string $action Static activity action.
* @param object $activity Activity data object.
* @return string
*/
function bp_groups_format_activity_action_activity_update( $action, $activity ) {
$user_link = bp_core_get_userlink( $activity->user_id );
$group = groups_get_group( $activity->item_id );
$group_link = '<a href="' . esc_url( bp_get_group_permalink( $group ) ) . '">' . esc_html( $group->name ) . '</a>';
$action = sprintf( __( '%1$s posted an update in the group %2$s', 'buddyboss' ), $user_link, $group_link );
/**
* Filters the groups 'activity_update' activity actions.
*
* @since BuddyBoss 1.1.9
*
* @param string $action The groups 'activity_update' activity actions.
* @param object $activity Activity data object.
*/
return apply_filters( 'bp_groups_format_activity_action_activity_update', $action, $activity );
}
我试过将它添加到我的主题中 functions.php:
function add_span_to_timeline_action($action) {
$action = sprintf( '%1$s<span class="activtiy-action"> posted in the group %2$s</span>', $user_link, $group_link );
return $action;
}
add_filter('bp_groups_format_activity_action_activity_update','add_span_to_timeline_action');
它确实更新了 html 并添加了 <span>
标签,但是 <a>
元素不起作用,因为 $user_link 和 $group_link我的函数中没有定义变量。
我不知道如何使 $activity 对象在我的函数中可用,以便我可以定义 link 变量。
我知道用 javascript/jquery 完成我想要的 css 但我不想依赖它,因为 activity 在页面上加载并用 ajax 更新所以我必须有一个 setTimeout setInterval 以便 activity 加载,这将导致页面在加载后更新。
原始过滤器传递 $activity
变量,因此您也可以访问它:
function add_span_to_timeline_action($action, $activity) {
$user_link = bp_core_get_userlink( $activity->user_id );
$group = groups_get_group( $activity->item_id );
$group_link = '<a href="' . esc_url( bp_get_group_permalink( $group ) ) . '">' . esc_html( $group->name ) . '</a>';
$action = sprintf( '%1$s<span class="activity-action"> posted in the group %2$s</span>', $user_link, $group_link );
return $action;
}
add_filter('bp_groups_format_activity_action_activity_update','add_span_to_timeline_action', 10, 2);
只需确保更新 add_filter
上的参数计数(10 - 优先级,2 - 参数计数)