重力表单:如何在确认条件短码中添加PHP函数?

时间:2020-08-14 作者:Michael

在重力形式中,我用各种条件短码设置了确认。示例:

[gravityforms action="conditional" merge_tag="{:3:value}" condition="contains" value="E"]*** GET A CATEGORY ***[/gravityforms]
此外,我有一个PHP函数,可以按类别获取所有帖子,我想在条件短代码中使用这个函数。我不知道怎么做,所以如果有任何帮助,我将不胜感激。

我的职能:useful_tools_list(array( \'type\' => \'documents\', desc => \'true\' ))

我还把它做成了一个短代码:[useful-tools type="documents" desc="true"]

我试过使用<?php ?>, 但我意识到我不能将PHP嵌入编辑器。条件短代码不支持在其中嵌套其他短代码,因此不起作用。

我想知道是否有一种方法可以操纵GF条件短码来允许嵌套?还是另一种调用我不知道的函数的方法?

2 个回复
SO网友:Sam

您可以使用the filter hook "gform_confirmation" 用于管理您的确认。之后,您将能够将您的短代码[有用的工具]用于do_shortcode() 请确认。

对不起,如果我误解了你的问题!

SO网友:Michael

我提出了一个解决方案,该解决方案无需通过PHP构建完整的确认。这并不适用于每个人的情况,但因为我确实构建了自己的函数/短代码,所以它对我很有用。

我将条件逻辑添加到我的短代码中,并删除了GF短代码。为此,我添加了merge\\u标记和值参数,如下所示:

[useful-tools type="documents" desc="true" merge_tag="{:3:value}" value="B"]
对于那些想看到我的短代码的人,我会把它包括在这里。它设置为列出与自定义分类法匹配的所有自定义帖子类型。还可以通过删除参数,将它们列在GF之外。

function useful_tools_list($atts){
    $atts = shortcode_atts(
        array(
            \'type\'  => \'\',
            \'desc\'  => \'\',
            \'ul\'    => \'\',
            \'li\'    => \'\',
            \'merge_tag\' => \'\',
            \'value\' => \'\',
         ), 
        $atts
    );
    
    $results = \'\';
    if (($atts[\'merge_tag\']) && (!preg_match(\'/\\b\'.$atts[\'value\'].\'\\b/\', $atts[\'merge_tag\']))) {
        $results .= \'\';
    } else {
        $all_terms = get_terms(\'types\');

        foreach($all_terms as $term) {
            wp_reset_query();
            if (($atts[\'type\']) && ($atts[\'type\'] != "")) {
                $args = array(\'post_type\' => \'useful-tools\',
                    \'tax_query\' => array(
                        array(
                            \'taxonomy\' => \'types\',
                            \'field\' => \'slug\',
                            \'terms\' => $term->slug,
                        ),
                    ),
                    \'types\' => $atts[\'type\'],
                 );
            } else {
                $args = array(\'post_type\' => \'useful-tools\',
                    \'tax_query\' => array(
                        array(
                            \'taxonomy\' => \'types\',
                            \'field\' => \'slug\',
                            \'terms\' => $term->slug,
                        ),
                    ),
                 );
            }

            $loop = new WP_Query($args);
            if($loop->have_posts()) {
                if ((!$atts[\'type\']) || ($atts[\'type\'] == "")) {
                    $results .= \'<h2>\'.$term->name.\'</h2>\';
                }
                if (($atts[\'ul\']) && ($atts[\'ul\'] == "true")) {
                    $results .= \'<ul class="tools-type-ul">\';
                }
                while($loop->have_posts()) : $loop->the_post();
                $postID = get_the_ID();
                $desc = \'\';
                $actualDesc = get_post_meta($postID, \'_post_desc\', true);
                if ($atts[\'desc\'] == \'true\' && $actualDesc != \'\') {
                    $desc = \' - \'.get_post_meta($postID, \'_post_desc\', true);
                }
                if (($atts[\'li\']) && ($atts[\'li\'] == "true")) {
                    $results .= \'<li><a href="\'.get_post_meta($postID, \'_post_url\', true).\'">\'.get_the_title().\'</a>\'.$desc.\'</li>\';
                } else {
                    $results .= \'<a href="\'.get_post_meta($postID, \'_post_url\', true).\'">\'.get_the_title().\'</a>\'.$desc.\'<br>\';
                }
                endwhile;
                if (($atts[\'ul\']) && ($atts[\'ul\'] == "true")) {
                    $results .= \'</ul>\';
                }
            }
        }
    }
    return $results;
}
add_shortcode(\'useful-tools\', \'useful_tools_list\');

相关推荐

覆盖User-edit.php以设计自己的个人资料页面

我到处都找遍了,但找不到有关这方面的任何信息。我想重新排列用户配置文件页面(wp admin/profile.php)上的字段。任何人都可以让我知道我如何从主题本身做这件事。我不想编辑WordPress核心文件。提前谢谢你。