WooCommerce:使用javascript代码获取帖子ID,并将其传递给ajax

时间:2019-04-11 12:55:04

标签: php jquery ajax wordpress woocommerce

我需要帮助找出如何从产品页面获取产品ID的功能,该功能可以在vimeo视频结束后打开模型框。 在那个模型框中,我需要一个带有产品ID的变量。这样我就可以自动获得产品的价格,并将ID插入简码中。

希望有人可以提供帮助,随时问我,如果您需要更多信息,我会尽力提供帮助。

我已经找到了最常见的想法。

global $product;
$id = $product->get_id();

global $post;
$id = $post->ID

global $product;
$id = $product->id;

我尝试了所有可以找到的变体。

如果我使用第一个,我的功能将无法正常工作。

如果我使用其他2,则只会给我0值。

// The javascript to call the function when video ends.
var iframe = document.querySelector("iframe");
var player = new Vimeo.Player(iframe);

    player.on("ended", function() {
      jQuery(document).ready(function($) {
    var data = {
        action: 'runThisPhpFunction',
    };

    jQuery.post(ajaxurl, data, function(popupfunction) {
        $("#popup-box").html(popupfunction);
    });
  });
});

接下来是我的功能。

//Call Javascript video vimeo script to functions

function add_my_scripts() {

        global $product;
        $deps = array('jquery');
        $in_footer = true;

            wp_register_script( 'myjavascript', get_stylesheet_directory_uri() . '/js/myjavascript.js', array(), '1.0.0', true );
          wp_enqueue_script( 'myjavascript', get_stylesheet_directory_uri() . '/js/myjavascript.js');
  }


add_action( 'wp_enqueue_scripts', 'add_my_scripts' );

add_filter( 'widget_text', 'do_shortcode' );
add_action( 'wp_ajax_runThisPhpFunction', 'runThisPhpFunction' );
add_action( 'wp_ajax_nopriv_runThisPhpFunction', 'runThisPhpFunction' );

global $wpdb;
global $wp;

// THE FUNCTION WHERE I NEED THE ID FROM CURRENT PRODUCT PAGE AUTOMATIC

function runThisPhpFunction() {
  global $product;
  $product = wc_get_product();
  $siteid = $product->ID;

    //echo '<script>console.log($product);</script>';
    echo '<script>document.getElementById("popup-box").classList.remove("hidden");</script>';
    echo '<div class="modalheader">';
    echo '<h3>Undskyld. Vi stoppede videoen!</h3>';
    echo '</div>';
    echo '<div class="modalcontent">';
    echo $siteid, 'Men vi venter lige her, klar til at fortsætte når du har hentet Dankortet ';
    echo '</div>';
}

1 个答案:

答案 0 :(得分:1)

在使用javascript / jQuery / Ajax时,需要在Javascript代码中获取产品ID (即邮政ID),以将其通过Ajax传递给PHP,请尝试以下操作重新访问代码:

add_action( 'wp_footer', 'custom_vimeo_player_script' );
function custom_vimeo_player_script() {
    // Not in cart, checkout and my account pages
    if( ! ( is_checkout() || is_cart() || is_account_page() ) ) :
    ?>
    <script type="text/javascript">
    jQuery(function($){
        if (typeof wc_add_to_cart_params === 'undefined') 
            return false;

        var iframe = document.querySelector("iframe"),
            player = new Vimeo.Player(iframe);

        player.on('ended', function(){
            $.ajax({
                type: 'POST',
                url: wc_add_to_cart_params.ajax_url,
                data: {
                    'action': 'enable_vimeo_popup_box',
                    'the_id': <?php echo get_the_id(); ?>,
                },
                success: function (result) {
                    // if popup-box has the class hidden
                    if( $("#popup-box").hasClass('hidden') && result ){
                        // remove the class hidden and add the html output
                        $("#popup-box").removeClass('hidden').html(result);
                    }
                    console.log(result);
                },
            });
        });
    });
    </script>
    <?php
    endif;
}

// PHP: WordPress Ajax function triggered by Javascript
add_action( 'wp_ajax_enable_vimeo_popup_box', 'enable_vimeo_popup_box' );
add_action( 'wp_ajax_nopriv_enable_vimeo_popup_box', 'enable_vimeo_popup_box' );
function enable_vimeo_popup_box() {
    if( isset($_POST['the_id']) ){
        $post_id = (int) $_POST['the_id'];

        echo '<div class="modalheader">
        <h3>' . __("Undskyld. Vi stoppede videoen!") . '</h3>
        </div><div class="modalcontent">' .
        '<em>(post_id er ' . $post_id . ')</em> ' .
        __("Men vi venter lige her, klar til at fortsætte når du har hentet Dankortet ") .
        '</div>';
    }
    die();
}

代码进入您的活动子主题(或活动主题)的function.php文件中。应该可以。