我正在尝试覆盖类 WC_Admin_Post_Types 中的一个函数并尝试过这样的事情:
插件/定制/ wc_admin_post_types_new.php
class WC_Admin_Post_Types_new {
public function __construct() {
add_filter( 'views_edit-product', array( $this, 'product_sorting_link_new' ) );
}
public function product_sorting_link_new( $views ) {
global $post_type, $wp_query;
if ( ! current_user_can('edit_others_pages') ) {
return $views;
}
$class = ( isset( $wp_query->query['orderby'] ) && $wp_query->query['orderby'] == 'menu_order title' ) ? 'current' : '';
$query_string = remove_query_arg(array( 'orderby', 'order' ));
$query_string = add_query_arg( 'orderby', urlencode('menu_order title'), $query_string );
$query_string = add_query_arg( 'order', urlencode('ASC'), $query_string );
$views['byorder'] = '<a href="' . esc_url( $query_string ) . '" class="' . esc_attr( $class ) . '">' . __( 'Sort Courses', 'woocommerce' ) . '</a>';
return $views;
}
}
new WC_Admin_Post_Types_new();
原始课程看起来像这样
插件/ woocommerce /包括/管理/类-WC-管理员-后types.php
class WC_Admin_Post_Types {
public function __construct() {
add_filter( 'views_edit-product', array( $this, 'product_sorting_link' ) );
}
public function product_sorting_link( $views ) {
global $post_type, $wp_query;
if ( ! current_user_can('edit_others_pages') ) {
return $views;
}
$class = ( isset( $wp_query->query['orderby'] ) && $wp_query->query['orderby'] == 'menu_order title' ) ? 'current' : '';
$query_string = remove_query_arg(array( 'orderby', 'order' ));
$query_string = add_query_arg( 'orderby', urlencode('menu_order title'), $query_string );
$query_string = add_query_arg( 'order', urlencode('ASC'), $query_string );
$views['byorder'] = '<a href="' . esc_url( $query_string ) . '" class="' . esc_attr( $class ) . '">' . __( 'Sort Products', 'woocommerce' ) . '</a>';
return $views;
}
}
new WC_Admin_Post_Types();
我想改变
$views['byorder'] = '<a href="' . esc_url( $query_string ) . '" class="' . esc_attr( $class ) . '">' . __( 'Sort Products', 'woocommerce' ) . '</a>';
与
$views['byorder'] = '<a href="' . esc_url( $query_string ) . '" class="' . esc_attr( $class ) . '">' . __( 'Sort Courses', 'woocommerce' ) . '</a>';
尝试添加
remove_filter( 'views_edit-product', array( 'WC_Admin_Post_Types', 'product_sorting_link_new' ) );
在__construct
和课外,但总是返回false。
那么如何在不编辑或不使用.pot的情况下删除此过滤器并将Sort Products
替换为Sort Courses
。需要知道,因为在woocommerce的不同类别上会有更多的改变。
答案 0 :(得分:1)
为此,我写了一个小功能:
function my_text_strings( $translated_text, $text, $domain ) {
switch ( $translated_text ) {
case 'Sort Products' :
$translated_text = __( 'Sort Courses', 'woocommerce' );
break;
}
return $translated_text;
}
add_filter( 'gettext', 'my_text_strings', 20, 3 )
但是我觉得这个方法很干净。
答案 1 :(得分:0)
找到了一个临时解决方案,但仍无法通过本书删除过滤器或操作。我在课堂之外在班级之外添加了这个函数,并且它可以覆盖。
function mfields_test_remove_actions() {
var_dump(remove_filter( 'views_edit-product', array( 'WC_Admin_Post_Types', 'product_sorting_link_new' ) )); // still returnes false but add filter is overriding it.
add_filter( 'views_edit-product', array( 'WC_Admin_Post_Types_new', 'product_sorting_link_new' ) );
}
add_action( 'admin_init', 'mfields_test_remove_actions' );