覆盖woocommerce中类的过滤器

时间:2015-04-02 08:26:28

标签: php wordpress

我正在尝试覆盖类 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的不同类别上会有更多的改变。

2 个答案:

答案 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' );