アンケートレポートの印刷ページでのアンケートの質問の並べ替え

WPForms でアンケート結果を表示したり、アンケートレポートを印刷したりするときに、フォームビルダーで表示される順番と同じ順番で質問が表示されないことがあります。

これは、WPFormsが各フィールドの内部フィールドIDを使用してレポート内の質問の順序を決定するために発生します。テスト中にフィールドを追加、削除、または並べ替えた場合、フィールドIDはフォーム内の質問の視覚的な順序と一致しなくなる可能性があります。

このチュートリアルでは、簡単な PHP スニペットを使用して、アンケートの質問を質問番号順に並べ替える方法を紹介します。

コード・スニペットの追加

以下のスニペットを使用して、アンケートレポートの印刷ページで質問の順序を変更し、フォームビルダーに表示されている順序に従うようにします。

カスタムコードの追加にヘルプが必要な場合は、コードスニペットの追加に関するチュートリアルをご覧ください。

/**
 * Reorder WPForms Survey Questions on the Print Survey Report page.
 */
function wpforms_reorder_survey_print_report() {
    // Check if we're on the Print Survey Report page.
    if ( isset( $_GET['page'], $_GET['view'], $_GET['print'] ) && 'wpforms-entries' === $_GET['page'] && 'survey' === $_GET['view'] && '1' === $_GET['print'] ) {
        ?>
        <script>
        (function($) {
            $(document).ready(function() {

                // Function to perform the reordering.
                function performReordering() {
                    var $container = $('#wpforms-survey-report');
                    if (!$container.length) return;

                    var $questions = $container.find('.question');
                    if (!$questions.length) return;

                    var questionsArray = [];

                    $questions.each(function(index) {
                        var $q = $(this);
                        var questionNumber = 9999; // Default high value
                        var $qNum = $q.find('.q-num');

                        if ($qNum.length) {
                            var qNumText = $qNum.text();
                            var match = qNumText.match(/Question\s+(\d+)/i);
                            if (match && match[1]) {
                                questionNumber = parseInt(match[1], 10);
                            }
                        }

                        questionsArray.push({
                            element: $q,
                            number: questionNumber,
                            originalIndex: index
                        });
                    });

                    questionsArray.sort(function(a, b) {
                        return a.number - b.number || a.originalIndex - b.originalIndex;
                    });

                    $questions.detach();
                    $.each(questionsArray, function(index, item) {
                        item.element.find('.q-num').text('Question ' + (index + 1));
                        $container.append(item.element);
                    });
                }

                performReordering();
            });
        })(jQuery);
        </script>
        <?php
    }
}
add_action( 'admin_print_footer_scripts', 'wpforms_reorder_survey_print_report' );

WPCodeプラグインまたはその他の方法でこのスニペットを追加する場合、スニペットの場所を「管理者のみ」に設定してください。ロケーションが他のオプションに設定されている場合、コードは動作しません。

これで完了です!これで、アンケート結果がフォームと同じ論理的な順序で表示されるようになります。