在wordpress中使用add_action删除代码?

时间:2013-10-18 11:01:17

标签: php wordpress jigoshop

你好我还习惯在wordpress中使用动作。我只是想知道我想要的是什么。

我想在不触及代码的情况下删除生成下面某些表单的echo。我看到他们之前和之后都有一个do_action。但是我想知道他们对我做我想做的事情有什么用处,如果是这样的话怎么去影响do_action之间的内容。

例如,只是说我想删除

            echo "
        <p>
            <label for='log'>".__( 'Username', 'jigoshop' )."</label>
            <input type='text' name='log' id='log' class='input-text username' />
        </p>
        ";

...从

do_action( 'jigoshop_widget_login_before_form' );

        // Get redirect URI
        $redirect_to = apply_filters( 'jigoshop_widget_login_redirect', get_permalink( jigoshop_get_page_id('myaccount') ) );
        $user_login = isset( $user_login ) ? $user_login : null;

        echo "<form action='".esc_url(wp_login_url( $redirect_to ))."' method='post' class='jigoshop_login_widget'>";

        // Username
        echo "
        <p>
            <label for='log'>".__( 'Username', 'jigoshop' )."</label>
            <input type='text' name='log' id='log' class='input-text username' />
        </p>
        ";

        // Password
        echo "
        <p>
            <label for='pwd'>".__( 'Password', 'jigoshop' )."</label>
            <input type='password' name='pwd' id='pwd' class='input-text password' />
        </p>
        ";

        echo "
        <p>
            <input type='submit' name='submit' value='".__( 'Login', 'jigoshop' )."' class='input-submit' />
            <a class='forgot' href='".esc_url(wp_lostpassword_url( $redirect_to ))."'>".__( 'Forgot it?', 'jigoshop' )."</a>
        </p>
        ";

        if (Jigoshop_Base::get_options()->get_option( 'jigoshop_enable_signup_form' ) == 'yes' ) {
            echo '<p class="register">';
            wp_register(__('New user?','jigoshop') . ' ' , '');
            echo '</p>';
        }

        echo "</form>";

        do_action( 'jigoshop_widget_login_after_form' );

        $links = apply_filters( 'jigoshop_widget_login_user_links', array() );

1 个答案:

答案 0 :(得分:0)

不幸的是,在使用do_action()remove_action()的情况下,没有真正“干净”的方法来实现这一目标。 do_action()函数完全像它听起来那样;它标志着某个特定动作发生的特定点,然后您可以将不同的函数挂钩/取消挂钩。您可以在表单之前和之后运行函数,但是没有任何操作在里面表单中运行,这限制了您的选项。

对您来说实际上更有用的是filter,因为这会让您实际影响对变量/内容的更改。唉,看起来在回应那些特定的字段之前没有应用过滤器,所以你再次运气不好。

在我看来,您唯一可行的选择是使用CSS / JS隐藏字段,或者分割窗口小部件的副本并根据需要进行更改:将user_login.php文件复制到插件文件夹,重命名类名,因此它不会与现有类冲突。然后注册并加载小部件:

class My_Custom_Widget_User_Login extends WP_Widget
{ 
     /**
     * Constructor
     * Setup the widget with the available options
     * Add actions to clear the cache whenever a post is saved|deleted or a theme is switched
     */
    public function __construct()
    {
        $options = array(
            'classname' => 'widget_user_login',
            'description' => __('Displays a handy login form for users', 'jigoshop')
        );
        // Ensure you also change the base ID of you widget
        parent::__construct('custom-user-login', __('Jigoshop: Login', 'jigoshop'), $options);
    }
    // Rest of class definition here; edit as you wish
} // End class

// Register and load the widget
function my_load_widget() {
    register_widget( 'custom-user-login' );
}
add_action( 'widgets_init', 'my_load_widget' );

这应该会为您提供一个可以随意调整的小部件副本,与Jigoshop插件的其余部分分开,因此它不会直接受到更新的影响。我没有机会测试它,但希望它能让你走上正轨。