【问题标题】:Make dynamic dropdown field required in Wordpress contact 7在 Wordpress 联系人 7 中设置动态下拉字段
【发布时间】:2019-11-22 09:38:20
【问题描述】:

所以我的 WPCF7 中有一个动态下拉列表。该插件在数据库中查询已发布的可用免费试用课程并将其放入下拉列表中。现在我想知道如何使它成为必填字段,因此当提交时进行表单验证时,它会检查该字段是否已被选中。 (并显示它需要的标签)

我的联系表格 7 中有这个简码:

[select_free_trial]

然后在我的Wordpress的functions.php中添加了这个函数和动作:

add_action('wpcf7_init', 'add_cf7_free_trial');

function add_cf7_free_trial() {
    wpcf7_add_shortcode('select_free_trial', 'select_free_trial'); }

function select_free_trial() {
    $form = 'Free trial';

    include('/home/pureseat/BETANGOCRM/include/db.php');
    $sql= "SELECT CRM_PRODUCTS.ID, CRM_PRODUCTS.PRODUCTS_NAME, CRM_PRODUCTS.PRODUCTS_TIMING,CRM_PRODUCTS.PRODUCTS_DATES, CRM_LOCATIONS.LOCATIONS_CITY,CRM_LOCATIONS.LOCATIONS_CITY_FR, CRM_LOCATIONS.LOCATIONS_CITY_NL FROM CRM_PRODUCTS JOIN CRM_LOCATIONS ON CRM_PRODUCTS.LOCATIONS_ID=CRM_LOCATIONS.LOCATIONS_ID WHERE CRM_PRODUCTS.PRODUCTS_PUBLISHONWEBSITE=1 AND CRM_PRODUCTS.PRODUCTS_TYPE='FREE_TRIAL' order by CRM_PRODUCTS.PRODUCTS_DATES";
    $result = mysqli_query($coni,$sql);
    echo '<p><span class="wpcf7-form-control-wrap PRODUCTS_ID"><label> Please select *<select name="color" class="wpcf7-form-control wpcf7-select wpcf7-validates-as-required" aria-required="true" aria-invalid="false">';
    echo '<option value=""></option>';
    while ($row = mysqli_fetch_array($result)){
        printf('<option value="%s">%s</option>', $row['ID'], $row['PRODUCTS_NAME']);
    }
    echo '</select></label></span></p>';

    $custom_tag = ob_get_contents();
    ob_end_clean();
    return $custom_tag; }

我已经在选择字段标签中添加了这个:

class="wpcf7-form-control wpcf7-select wpcf7-validates-as-required" aria-required="true"

但这不会导致字段验证。 我想我可能应该将它添加到 javascript/jquery 验证中,但我对 Wordpress 有点陌生,所以我不知道在哪里执行此操作。

或者有没有更好的方法来填充我的下拉列表?我还在这里找到了一些信息https://xnau.com/populate-a-form-dropdown-from-the-database/,这些信息会在选择字段中添加一个钩子,而不是一个简码。

【问题讨论】:

    标签: javascript php wordpress


    【解决方案1】:

    您还需要在父跨度标记中添加选择字段名称。在代码下方使用。

    add_action('wpcf7_init', 'add_cf7_free_trial');
    
    function add_cf7_free_trial() {
        wpcf7_add_shortcode('select_free_trial', 'select_free_trial'); }
    
    function select_free_trial() {
        $form = 'Free trial';
    
        include('/home/pureseat/BETANGOCRM/include/db.php');
        $sql= "SELECT CRM_PRODUCTS.ID, CRM_PRODUCTS.PRODUCTS_NAME, CRM_PRODUCTS.PRODUCTS_TIMING,CRM_PRODUCTS.PRODUCTS_DATES, CRM_LOCATIONS.LOCATIONS_CITY,CRM_LOCATIONS.LOCATIONS_CITY_FR, CRM_LOCATIONS.LOCATIONS_CITY_NL FROM CRM_PRODUCTS JOIN CRM_LOCATIONS ON CRM_PRODUCTS.LOCATIONS_ID=CRM_LOCATIONS.LOCATIONS_ID WHERE CRM_PRODUCTS.PRODUCTS_PUBLISHONWEBSITE=1 AND CRM_PRODUCTS.PRODUCTS_TYPE='FREE_TRIAL' order by CRM_PRODUCTS.PRODUCTS_DATES";
        $result = mysqli_query($coni,$sql);
        echo '<p><label> Please select *<span class="wpcf7-form-control-wrap PRODUCTS_ID color"><select name="color" class="wpcf7-form-control wpcf7-select wpcf7-validates-as-required" aria-required="true" aria-invalid="false">';
        echo '<option value=""></option>';
        while ($row = mysqli_fetch_array($result)){
            printf('<option value="%s">%s</option>', $row['ID'], $row['PRODUCTS_NAME']);
        }
        echo '</select></span></label></p>';
    
        $custom_tag = ob_get_contents();
        ob_end_clean();
        return $custom_tag; }
    

    【讨论】:

    • 感谢您的回答.. 这似乎也没有任何作用。这是我的测试页面:be-tango.com/test-php.html
    • 如果我将选择下拉列表的名称更改为表单中存在的另一个名称,它确实会给我所需的消息。但是当我使用不同的名称(在这种情况下为颜色)时,它不起作用......不可能我需要在验证的 javascript 中的某处硬编码所有自定义字段?
    猜你喜欢
    • 1970-01-01
    • 2016-02-19
    • 1970-01-01
    • 2020-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-13
    • 1970-01-01
    相关资源
    最近更新 更多