Php 在wordpress中删除带有添加动作的代码?

Php 在wordpress中删除带有添加动作的代码?,php,wordpress,jigoshop,Php,Wordpress,Jigoshop,嗨,我仍然习惯在wordpress中使用动作。我只是想知道我想要的是什么 我想删除正在生成以下某些表单的echos,而不接触代码。我看到在他们之前和之后都有一个do_action。但是我想知道它们对我做我想做的事情有什么用处吗?如果是的话,如何影响do\u actions之间的内容 例如,只要说我想删除 echo " <p> <label for='log'>".__( 'Username', 'jigosh

嗨,我仍然习惯在wordpress中使用动作。我只是想知道我想要的是什么

我想删除正在生成以下某些表单的
echo
s,而不接触代码。我看到在他们之前和之后都有一个
do_action
。但是我想知道它们对我做我想做的事情有什么用处吗?如果是的话,如何影响
do\u action
s之间的内容

例如,只要说我想删除

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

“.”('Username','jigoshop')

";

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() );
do_action('jigoshop_widget_login_before_form');
//获取重定向URI
$redirect_to=应用过滤器('jigoshop_widget_login_redirect',get_permalink(jigoshop_get_page_id('myaccount'));
$user\u login=isset($user\u login)$用户登录:空;
回声“;
//用户名
回声“

“.”('Username','jigoshop')

"; //密码 回声“ “.”('Password','jigoshop')

"; 回声“

"; if(Jigoshop_Base::get_options()->get_option('Jigoshop_enable_signup_form')=='yes'){ echo'

; wp_寄存器(uuu('New user?','jigoshop'),''; 回声“

”; } 回声“; do_操作(“jigoshop_widget_login_后的表单”); $links=apply_filters('jigoshop_widget_login_user_links',array());
不幸的是,在上述场景中,使用
do\u action()
remove\u action()
没有真正的“干净”方法来实现这一点。
do\u action()
函数的作用与它听起来的完全一样;它标记某个特定操作发生的特定点,然后可以将不同的函数挂接/取消挂接到该点。您可以在窗体之前和之后运行函数,但窗体内部没有运行任何操作,这限制了您的选项

实际上对您更有用的是a,因为这会让您实际影响对变量/内容的更改。唉,看起来在回显这些特定字段之前没有应用任何过滤器,所以你又一次走运了

在我看来,您唯一实用的选择是使用CSS/JS隐藏字段,或者复制小部件的副本并根据需要进行更改:将
user\u login.php
文件复制到您的plugins文件夹,重命名类名,使其不与现有类冲突。然后注册并加载小部件:

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插件的其余部分分开,这样它就不会受到更新的直接影响。我还没有机会测试它,但希望它能让您走上正轨。

为什么不从表单模板中删除不需要的部分呢?2个原因,我想练习使用钩子、过滤器和操作,但也因为如果有插件更新,我希望我的客户端能够继续进行。我决定使用
do_actions
用隐藏的
div
隐藏第一个表单,然后构建我自己的表单。啊,好的,你可以在functions.php中添加一个函数来匹配并删除你不想要的字符串,但即使这样,您也需要一个编写良好的正则表达式来删除它,或者需要一个文字比较。第一个需要一点工作,除非你已经擅长正则表达式,第二个仍然可以在插件更新时中断,比如说如果开发人员从代码中删除了一些换行符。