创建不带插件的联系人表单

时间:2018-04-01 作者:user8463989

我是Wordpress开发的新手,厌倦了用联系人表单7来设计我想要的样式。在我的联系人页面上放置一个html表单,并将其发布到处理表单提交的php页面,这是否可能而且不被认为是“错误的做法”?还是仅仅没有做到?

3 个回复
最合适的回答,由SO网友:kierzniak 整理而成

这是我对联系人表单的非常简单的实现:

class WPSE_299521_Form {

    /**
     * Class constructor
     */
    public function __construct() {

        $this->define_hooks();
    }

    public function controller() {

        if( isset( $_POST[\'submit\'] ) ) { // Submit button

            $full_name   = filter_input( INPUT_POST, \'full_name\', FILTER_SANITIZE_STRING );
            $email       = filter_input( INPUT_POST, \'email\', FILTER_SANITIZE_STRING | FILTER_SANITIZE_EMAIL );
            $color       = filter_input( INPUT_POST, \'color\', FILTER_SANITIZE_STRING );
            $accessories = filter_input( INPUT_POST, \'accessories\', FILTER_SANITIZE_STRING, FILTER_REQUIRE_ARRAY );
            $comments    = filter_input( INPUT_POST, \'comments\', FILTER_SANITIZE_STRING );

            // Send an email and redirect user to "Thank you" page.
        }
    }

    /**
     * Display form
     */
    public function display_form() {

        $full_name   = filter_input( INPUT_POST, \'full_name\', FILTER_SANITIZE_STRING );
        $email       = filter_input( INPUT_POST, \'email\', FILTER_SANITIZE_STRING | FILTER_SANITIZE_EMAIL );
        $color       = filter_input( INPUT_POST, \'color\', FILTER_SANITIZE_STRING );
        $accessories = filter_input( INPUT_POST, \'accessories\', FILTER_SANITIZE_STRING, FILTER_REQUIRE_ARRAY );
        $comments    = filter_input( INPUT_POST, \'comments\', FILTER_SANITIZE_STRING );

        // Default empty array
        $accessories = ( $accessories === null ) ? array() : $accessories;

        $output = \'\';

        $output .= \'<form method="post">\';
        $output .= \'    <p>\';
        $output .= \'        \' . $this->display_text( \'full_name\', \'Name\', $full_name );
        $output .= \'    </p>\';
        $output .= \'    <p>\';
        $output .= \'        \' . $this->display_text( \'email\', \'Email\', $email );
        $output .= \'    </p>\';
        $output .= \'    <p>\';
        $output .= \'        \' . $this->display_radios( \'color\', \'Color\', $this->get_available_colors(), $color );
        $output .= \'    </p>\';
        $output .= \'    <p>\';
        $output .= \'        \' . $this->display_checkboxes( \'accessories\', \'Accessories\', $this->get_available_accessories(), $accessories );
        $output .= \'    </p>\';
        $output .= \'    <p>\';
        $output .= \'        \' . $this->display_textarea( \'comments\', \'comments\', $comments );
        $output .= \'    </p>\';
        $output .= \'    <p>\';
        $output .= \'        <input type="submit" name="submit" value="Submit" />\';
        $output .= \'    </p>\';
        $output .= \'</form>\';

        return $output;
    }

    /**
     * Display text field
     */
    private function display_text( $name, $label, $value = \'\' ) {

        $output = \'\';

        $output .= \'<label>\' . esc_html__( $label, \'wpse_299521\' ) . \'</label>\';
        $output .= \'<input type="text" name="\' . esc_attr( $name ) . \'" value="\' . esc_attr( $value ) . \'">\';

        return $output;
    }

    /**
     * Display textarea field
     */
    private function display_textarea( $name, $label, $value = \'\' ) {

        $output = \'\';

        $output .= \'<label> \' . esc_html__( $label, \'wpse_299521\' ) . \'</label>\';
        $output .= \'<textarea name="\' . esc_attr( $name ) . \'" >\' . esc_html( $value ) . \'</textarea>\';

        return $output;
    }

    /**
     * Display radios field
     */
    private function display_radios( $name, $label, $options, $value = null ) {

        $output = \'\';

        $output .= \'<label>\' . esc_html__( $label, \'wpse_299521\' ) . \'</label>\';

        foreach ( $options as $option_value => $option_label ):
            $output .= $this->display_radio( $name, $option_label, $option_value, $value );
        endforeach;

        return $output;
    }

    /**
     * Display single checkbox field
     */
    private function display_radio( $name, $label, $option_value, $value = null ) {

        $output = \'\';

        $checked = ( $option_value === $value ) ? \' checked\' : \'\';

        $output .= \'<label>\';
        $output .= \'    <input type="radio" name="\' . esc_attr( $name ) . \'" value="\' . esc_attr( $option_value ) . \'"\' . esc_attr( $checked ) . \'>\';
        $output .= \'    \' . esc_html__( $label, \'wpse_299521\' );
        $output .= \'</label>\';

        return $output;
    }

    /**
     * Display checkboxes field
     */
    private function display_checkboxes( $name, $label, $options, $values = array() ) {

        $output = \'\';

        $name .= \'[]\';

        $output .= \'<label>\' . esc_html__( $label, \'wpse_299521\' ) . \'</label>\';

        foreach ( $options as $option_value => $option_label ):
            $output .= $this->display_checkbox( $name, $option_label, $option_value, $values );
        endforeach;

        return $output;
    }

    /**
     * Display single checkbox field
     */
    private function display_checkbox( $name, $label, $available_value, $values = array() ) {

        $output = \'\';

        $checked = ( in_array($available_value, $values) ) ? \' checked\' : \'\';

        $output .= \'<label>\';
        $output .= \'    <input type="checkbox" name="\' . esc_attr( $name ) . \'" value="\' . esc_attr( $available_value ) . \'"\' . esc_attr( $checked ) . \'>\';
        $output .= \'    \' . esc_html__( $label, \'wpse_299521\' );
        $output .= \'</label>\';

        return $output;
    }

    /**
     * Get available colors
     */
    private function get_available_colors() {

        return array(
            \'red\' => \'Red\',
            \'blue\' => \'Blue\',
            \'green\' => \'Green\',
        );
    }

    /**
     * Get available accessories
     */
    private function get_available_accessories() {

        return array(
            \'case\' => \'Case\',
            \'tempered_glass\' => \'Tempered glass\',
            \'headphones\' => \'Headphones\',
        );
    }

    /**
     * Define hooks related to plugin
     */
    private function define_hooks() {

        /**
         * Add action to send email
         */
        add_action( \'wp\', array( $this, \'controller\' ) );

        /**
         * Add shortcode to display form
         */
        add_shortcode( \'contact\', array( $this, \'display_form\' ) );
    }
}

new WPSE_299521_Form();
粘贴代码后,可以使用快捷码[contact] 以显示它。

SO网友:Mark Kaplun

所有表单插件都很可怕,只是表单通常非常复杂,无法正确编码,尤其是当站点管理员应该能够设计表单时。

自己编写表单并没有什么错,只是您可能需要重新创建其他人已经完善的东西,或者至少有一个良好的基础(格式化电子邮件、存储在DB中等等)。

所以,这实际上取决于您的具体要求,如果不需要灵活性,并且发送电子邮件已经足够好了,那么编写自己的电子邮件应该比使用插件“战斗”更容易。

SO网友:Mr Rethman

由于您没有在DB上执行CRUD,我不明白为什么不执行。我以前使用过页面模板进行表单处理,并指出了我的联系人<form ...> action 对它来说action="<?php echo home_url( \'my-form-processing-page-template-slug\' ); ?>".

或者,使用实际的单桩类型进行处理,即。action="<?php echo get_the_permalink();?>" (需要是is_single() || is_singular() 使用get_the_permalink()).

结束

相关推荐

GravityForms to Salesforce API,离开公司的人的问题

我在WordPress网站上使用GravityForms,并有GravityForms to Salesforce API插件,该插件将填写表单的人员添加为Salesforce中的潜在客户。它工作得很好,除非人们没有输入公司名称。如果他们不进入公司,有没有办法将其默认为全名?这是我的密码。我添加了警报框来帮助调试,但它们甚至不运行!add_filter(\'gform_after_submission_1\', \'create_company_full_name\', 10, 4); func

创建不带插件的联系人表单 - 小码农CODE - 行之有效找到问题解决它

创建不带插件的联系人表单

时间:2018-04-01 作者:user8463989

我是Wordpress开发的新手,厌倦了用联系人表单7来设计我想要的样式。在我的联系人页面上放置一个html表单,并将其发布到处理表单提交的php页面,这是否可能而且不被认为是“错误的做法”?还是仅仅没有做到?

3 个回复
最合适的回答,由SO网友:kierzniak 整理而成

这是我对联系人表单的非常简单的实现:

class WPSE_299521_Form {

    /**
     * Class constructor
     */
    public function __construct() {

        $this->define_hooks();
    }

    public function controller() {

        if( isset( $_POST[\'submit\'] ) ) { // Submit button

            $full_name   = filter_input( INPUT_POST, \'full_name\', FILTER_SANITIZE_STRING );
            $email       = filter_input( INPUT_POST, \'email\', FILTER_SANITIZE_STRING | FILTER_SANITIZE_EMAIL );
            $color       = filter_input( INPUT_POST, \'color\', FILTER_SANITIZE_STRING );
            $accessories = filter_input( INPUT_POST, \'accessories\', FILTER_SANITIZE_STRING, FILTER_REQUIRE_ARRAY );
            $comments    = filter_input( INPUT_POST, \'comments\', FILTER_SANITIZE_STRING );

            // Send an email and redirect user to "Thank you" page.
        }
    }

    /**
     * Display form
     */
    public function display_form() {

        $full_name   = filter_input( INPUT_POST, \'full_name\', FILTER_SANITIZE_STRING );
        $email       = filter_input( INPUT_POST, \'email\', FILTER_SANITIZE_STRING | FILTER_SANITIZE_EMAIL );
        $color       = filter_input( INPUT_POST, \'color\', FILTER_SANITIZE_STRING );
        $accessories = filter_input( INPUT_POST, \'accessories\', FILTER_SANITIZE_STRING, FILTER_REQUIRE_ARRAY );
        $comments    = filter_input( INPUT_POST, \'comments\', FILTER_SANITIZE_STRING );

        // Default empty array
        $accessories = ( $accessories === null ) ? array() : $accessories;

        $output = \'\';

        $output .= \'<form method="post">\';
        $output .= \'    <p>\';
        $output .= \'        \' . $this->display_text( \'full_name\', \'Name\', $full_name );
        $output .= \'    </p>\';
        $output .= \'    <p>\';
        $output .= \'        \' . $this->display_text( \'email\', \'Email\', $email );
        $output .= \'    </p>\';
        $output .= \'    <p>\';
        $output .= \'        \' . $this->display_radios( \'color\', \'Color\', $this->get_available_colors(), $color );
        $output .= \'    </p>\';
        $output .= \'    <p>\';
        $output .= \'        \' . $this->display_checkboxes( \'accessories\', \'Accessories\', $this->get_available_accessories(), $accessories );
        $output .= \'    </p>\';
        $output .= \'    <p>\';
        $output .= \'        \' . $this->display_textarea( \'comments\', \'comments\', $comments );
        $output .= \'    </p>\';
        $output .= \'    <p>\';
        $output .= \'        <input type="submit" name="submit" value="Submit" />\';
        $output .= \'    </p>\';
        $output .= \'</form>\';

        return $output;
    }

    /**
     * Display text field
     */
    private function display_text( $name, $label, $value = \'\' ) {

        $output = \'\';

        $output .= \'<label>\' . esc_html__( $label, \'wpse_299521\' ) . \'</label>\';
        $output .= \'<input type="text" name="\' . esc_attr( $name ) . \'" value="\' . esc_attr( $value ) . \'">\';

        return $output;
    }

    /**
     * Display textarea field
     */
    private function display_textarea( $name, $label, $value = \'\' ) {

        $output = \'\';

        $output .= \'<label> \' . esc_html__( $label, \'wpse_299521\' ) . \'</label>\';
        $output .= \'<textarea name="\' . esc_attr( $name ) . \'" >\' . esc_html( $value ) . \'</textarea>\';

        return $output;
    }

    /**
     * Display radios field
     */
    private function display_radios( $name, $label, $options, $value = null ) {

        $output = \'\';

        $output .= \'<label>\' . esc_html__( $label, \'wpse_299521\' ) . \'</label>\';

        foreach ( $options as $option_value => $option_label ):
            $output .= $this->display_radio( $name, $option_label, $option_value, $value );
        endforeach;

        return $output;
    }

    /**
     * Display single checkbox field
     */
    private function display_radio( $name, $label, $option_value, $value = null ) {

        $output = \'\';

        $checked = ( $option_value === $value ) ? \' checked\' : \'\';

        $output .= \'<label>\';
        $output .= \'    <input type="radio" name="\' . esc_attr( $name ) . \'" value="\' . esc_attr( $option_value ) . \'"\' . esc_attr( $checked ) . \'>\';
        $output .= \'    \' . esc_html__( $label, \'wpse_299521\' );
        $output .= \'</label>\';

        return $output;
    }

    /**
     * Display checkboxes field
     */
    private function display_checkboxes( $name, $label, $options, $values = array() ) {

        $output = \'\';

        $name .= \'[]\';

        $output .= \'<label>\' . esc_html__( $label, \'wpse_299521\' ) . \'</label>\';

        foreach ( $options as $option_value => $option_label ):
            $output .= $this->display_checkbox( $name, $option_label, $option_value, $values );
        endforeach;

        return $output;
    }

    /**
     * Display single checkbox field
     */
    private function display_checkbox( $name, $label, $available_value, $values = array() ) {

        $output = \'\';

        $checked = ( in_array($available_value, $values) ) ? \' checked\' : \'\';

        $output .= \'<label>\';
        $output .= \'    <input type="checkbox" name="\' . esc_attr( $name ) . \'" value="\' . esc_attr( $available_value ) . \'"\' . esc_attr( $checked ) . \'>\';
        $output .= \'    \' . esc_html__( $label, \'wpse_299521\' );
        $output .= \'</label>\';

        return $output;
    }

    /**
     * Get available colors
     */
    private function get_available_colors() {

        return array(
            \'red\' => \'Red\',
            \'blue\' => \'Blue\',
            \'green\' => \'Green\',
        );
    }

    /**
     * Get available accessories
     */
    private function get_available_accessories() {

        return array(
            \'case\' => \'Case\',
            \'tempered_glass\' => \'Tempered glass\',
            \'headphones\' => \'Headphones\',
        );
    }

    /**
     * Define hooks related to plugin
     */
    private function define_hooks() {

        /**
         * Add action to send email
         */
        add_action( \'wp\', array( $this, \'controller\' ) );

        /**
         * Add shortcode to display form
         */
        add_shortcode( \'contact\', array( $this, \'display_form\' ) );
    }
}

new WPSE_299521_Form();
粘贴代码后,可以使用快捷码[contact] 以显示它。

SO网友:Mark Kaplun

所有表单插件都很可怕,只是表单通常非常复杂,无法正确编码,尤其是当站点管理员应该能够设计表单时。

自己编写表单并没有什么错,只是您可能需要重新创建其他人已经完善的东西,或者至少有一个良好的基础(格式化电子邮件、存储在DB中等等)。

所以,这实际上取决于您的具体要求,如果不需要灵活性,并且发送电子邮件已经足够好了,那么编写自己的电子邮件应该比使用插件“战斗”更容易。

SO网友:Mr Rethman

由于您没有在DB上执行CRUD,我不明白为什么不执行。我以前使用过页面模板进行表单处理,并指出了我的联系人<form ...> action 对它来说action="<?php echo home_url( \'my-form-processing-page-template-slug\' ); ?>".

或者,使用实际的单桩类型进行处理,即。action="<?php echo get_the_permalink();?>" (需要是is_single() || is_singular() 使用get_the_permalink()).

相关推荐

Call another page in forms

我正在为WordPress插件做一些练习。在插件中,我正在处理一个表单,我需要的是在提交时调用另一个页面。我试过了,但似乎什么都没用。<form method = \"Post\" action = \"some_file.php\"> </form>