如何在短码中返回包含jQuery和AJAX的字符串?

时间:2017-09-12 作者:The WP Intermediate

这就是全部代码→

<script>
            jQuery.noConflict();
            jQuery(document).ready(function()
                {

                    jQuery(\'#mailchimp_submit-<?php echo $random?>\').click(function()
                    {
                        jQuery(\'#process-<?php echo $random?>\').css(\'display\',\'block\');
                        var datastring = \'&name=\' + escape(jQuery(\'#name-<?php echo $random?>\').val()) + \'&email=\' + escape(jQuery(\'#email-<?php echo $random?>\').val()) + \'&api_key=<?php echo $mailchimp_api_key;?>&list_id=<?php echo $mailchimp_list_id;?>\';
                        jQuery.ajax({
                            url: \'<?php echo rest_url(\'/chimp/rest/process_chimp/\');?>\',
                            data: datastring,
                            success: function(msg)
                            {
                                jQuery(\'#process-<?php echo $random?>\').css(\'display\',\'none\');
                                jQuery(\'#newsletter_msg-<?php echo $random?>\').html(msg);
                            },
                            error: function(msg)
                            {
                                jQuery(\'#process-<?php echo $random?>\').css(\'display\',\'none\');
                                jQuery(\'#newsletter_msg-<?php echo $random?>\').html(msg);
                            }
                        });
                        return false;
                    });
            });
        </script>
有很多困惑:

1个→

如何处理此问题,因为它有分号→

jQuery.noConflict();
我应该这样做吗:

$output = \'jQuery.noConflict();\';

$output = \'jQuery.noConflict()\';

$output = \'jQuery.noConflict();\'

2→

如何处理具有功能的→

jQuery(document).ready(function()
像这样→

$output =  \'jQuery(document).ready(function()\';
如何处理此问题→

4→

jQuery.ajax({
              url: \'<?php echo rest_url(\'/chimp/rest/process_chimp/\');?>\',
              data: datastring,
              success: function(msg)
              {

5→

return false;
以上内容是否也需要修改?

请指导我哪里做错了,哪里的方法和理解不正确。This is an Extension of this old question.

以上所有代码都是我试图转换为短代码的小部件的一部分。

1 个回复
最合适的回答,由SO网友:Jacob Peattie 整理而成

对于大量HTML,最好使用输出缓冲ob_start()ob_get_clean(). 它的文档是here, 但简短的版本是,它允许您捕获输出以稍后返回。这样,您就可以像在模板中一样输出HTML,但捕获HTML并在最后返回:

function wpse_279827_shortcode() {
    // Do PHP stuff.
    $message = \'Hello world!\';
    // Start capturing output.
    ob_start(); 
    // Close PHP tags and start outputting HTML.
    ?>

    <div>
        <h1>HTML can go here</h1>
        <p>And also php code:</p>
        <p><?php echo \'Hello!\'; ?></p>
    </div>
    <script>
        jQuery(document).ready(function() {
            alert(\'Message variable from PHP: <?php echo $message; ?>\');
        });
    </script>

    <?php
    // Reopen PHP tags and return captured output.
    return ob_get_clean(); 
}
add_shortcode( \'wpse_279827_shortcode\', \'wpse_279827_shortcode\' );

结束

相关推荐

主题子PHP中的版权信息更改

下面是从中提取信息的文件。我尝试将/inc文件夹添加到子主题并添加模板标记。php已更改,但这不会产生任何影响。/wp内容/主题/hestia/inc/模板标签。php这是这里的原始代码…function hesta_bottom_footer_content( $is_callback = false ) { if ( ! $is_callback ) { ?> <div class=\"hestia-bottom-footer-con