Gravity Forms: Как добавить PHP-функцию в условный шорткод подтверждения?

Вопрос или проблема

В Gravity Forms у меня настроено подтверждение с различными условными шорткодами. Пример:

[gravityforms action="conditional" merge_tag="{:3:value}" condition="contains" value="E"]*** ПОЛУЧИТЕ КАТЕГОРИЮ ***[/gravityforms]

Кроме того, у меня есть функция PHP, которая получает все посты по категории, и я хотел бы использовать эту функцию внутри условного шорткода. Я не могу найти способ сделать это, поэтому любая помощь будет приветствоваться.

Моя функция: useful_tools_list(array( 'type' => 'documents', desc => 'true' ))

Я также сделал из этого шорткод: [useful-tools type="documents" desc="true"]

Я попытался использовать <?php ?>, но понял, что не могу встроить PHP в редактор. Условный шорткод не поддерживает вложение других шорткодов внутри себя, так что это не работает.

Мне интересно, есть ли способ манипулировать условным шорткодом GF, чтобы позволить вложение? Или есть другой способ вызова функции, о котором я не знаю?

Вместо использования шорткода в вашем подтверждении, вы можете использовать фильтр “gform_confirmation” для управления вашим подтверждением. После этого вы сможете использовать ваш шорткод [useful-tools] с do_shortcode() в вашем подтверждении.

Извините, если я неправильно понял вашу проблему!

Я нашел решение, которое будет работать без необходимости полностью строить подтверждение через PHP. Это может не подойти для каждой ситуации, но поскольку я разработал свою собственную функцию/шорткод, это работает для меня.

Я добавил условную логику в свой шорткод и совсем убрал шорткод GF. Для этого я добавил параметры merge_tag и value следующим образом:

[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');

Ответ или решение

Как добавить PHP-функцию в условный шорткод подтверждения Gravity Forms

Введение

Вопрос интеграции пользовательских функций в Gravity Forms, особенно в контексте условных шорткодов, актуален для разработчиков, стремящихся улучшить функциональность своих форм. В частности, многие пользователи сталкиваются с задачей добавления PHP-функций в условные уведомления, такие как сообщения о подтверждении. В этом руководстве мы рассмотрим, как обойти ограничения шорткодов и эффективно использовать ваши PHP функции в подтверждениях Gravity Forms.

Проблема

При попытке использовать сложные PHP-функции в условных шорткодах Gravity Forms, сталкиваются с рядом ограничений:

  1. Недоступность PHP в редакторе. В редакторах WordPress нельзя вставлять PHP-код.
  2. Ограничения шорткодов. Условные шорткоды не поддерживают вложенные шорткоды, что делает невозможным вызов другой функции внутри них.

Решение заключается в использовании фильтра gform_confirmation, который предоставляет более гибкие возможности кастомизации, позволяя применять любые требуемые вам функции и шорткоды.

Решение через фильтр gform_confirmation

  1. Использование фильтра: Этот подход позволяет обрабатывать логику подтверждения формы на уровне PHP, а не на уровне визуального редактора.

    Пример кода для использования фильтра:

    add_filter('gform_confirmation_1', 'custom_confirmation_message', 10, 4);
    function custom_confirmation_message($confirmation, $form, $entry, $ajax) {
       // Здесь можно использовать вашу PHP функцию
       $confirmation = do_shortcode('[useful-tools type="documents" desc="true"]');
       return $confirmation;
    }

    В этом примере вы добавляете логику подтверждения для формы с ID 1. Вы можете изменить этот код в зависимости от ваших потребностей.

  2. Создание функции шорткода: Убедитесь, что ваша функция шорткода реализована корректно и возвращает ожидаемые данные. Вот как может выглядеть ваша функция:

    function useful_tools_list($atts) {
       $atts = shortcode_atts(
           array(
               'type' => '',
               'desc' => '',
               'ul' => '',
               'li' => '',
               'merge_tag' => '',
               'value' => '',
           ),
           $atts
       );
    
       // Логика получения и отображения постов
       $results = "";
    
       // Ваш код для получения постов и обработки данных здесь
    
       return $results;
    }
    add_shortcode('useful-tools', 'useful_tools_list');

Пример использования шорткода

Ваш шорткод useful-tools теперь может быть использован в функции подтверждения, и вы сможете динамически выводить контент на основании значений вашей формы. Например:

$confirmation = do_shortcode('[useful-tools type="documents" desc="true" merge_tag="{:3:value}" value="E"]');

Заключение

Эта методология позволяет эффективно интегрировать пользовательский функционал в Gravity Forms, расширяя его возможности и повышая интерактивность. Теперь у вас есть возможность использовать свои PHP-функции и шорткоды в условиях подтверждения форм без необходимости кода внутри редактора. Этот подход не только улучшает функциональность, но также упрощает управление контентом и его динамическое отображение.

Если у вас есть дополнительные вопросы или вам требуется помощь в конкретных аспектах реализации, не стесняйтесь обращаться за поддержкой.

Оцените материал
Добавить комментарий

Капча загружается...