WooCommerce: получите идентификатор поста в коде javascript и передайте его через ajax - PullRequest
1 голос
/ 11 апреля 2019

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

Надеюсь, кто-то может помочь, и не стесняйтесь спрашивать, я постараюсь помочь, если вам нужна дополнительная информация.

Я уже попробовал самые распространенные идеи, которые смог найти.

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 Ответ

1 голос
/ 12 апреля 2019

Поскольку вы используете javascript / jQuery / Ajax и вам нужно получить идентификатор продукта (который является идентификатором поста) в вашем коде Javascript для передачи его через 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 вашей активной дочерней темы (или активной темы). Должно работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...