Выполнить PHP-файл через Ajax в jQuery - PullRequest
0 голосов
/ 14 сентября 2018

Когда я помещаю этот код в functions.php, он отображает количество продуктов рядом со значком корзины. Это работает хорошо, когда в functions.php

Но поскольку я использую плагин для кэширования, я не могу включить код в functions.php или должен каким-то образом исключить выполнение кода из кеша.

Я думаю, что лучше всего было бы с Ajax jQuery. Есть ли лучший способ ??

Это код ниже, который я сейчас помещаю в файл cartbubble.php, это так:

<?
function my_wc_cart_count() 
{
  if (in_array('woocommerce/woocommerce.php', apply_filters('active_plugins', get_option('active_plugins')))) 
  {     
    $count = WC()->cart->cart_contents_count; ?>
    <a class="cart-contents" href="<?php echo WC()->cart->get_cart_url(); ?>" title="<?php _e('View your shopping cart'); ?>">
      <?php if ( $count >= 0 ) { ?>
        <span class="cart-contents-count"><?php echo esc_html( $count ); ?></span>
      <?php } ?>
    </a>
    <?php
  }
}

add_action('woo_header_inside', 'my_wc_cart_count');

function my_header_add_to_cart_fragment($fragments) 
{
  ob_start();
  if ($count >= 0) 
  { ?>
    <span class="cart-contents-count"><?php echo WC()->cart->cart_contents_count(); ?></span>
    <?php 
  } ?>

  <?php
    $fragments['span.cart-contents-count'] = ob_get_clean();
    return $fragments;
}

add_filter('woocommerce_add_to_cart_fragments', 'my_header_add_to_cart_fragment');

Вот что я использовал в header.php для вызова через ajax jquery:

<script type="text/javascript">
  jQuery(document).ready(function() {
    jQuery.ajax({
      url: '/wp-content/themes/canvas-child/cartbubble.php',
      type: 'POST',
      success: function(result) {
        console.log(result);.
      },
      error: function() {
        console.log('error');
      }
    });
  });
</script>

Почему не выполняется функция так же, как в functions.php ??

Заранее спасибо

1 Ответ

0 голосов
/ 14 сентября 2018

Ваша главная проблема - ваш подход. Файл cartbubble.php не загружает WordPress в первую очередь, поэтому вызываемые вами функции недоступны. Файл functions.php вызывается при любой нормальной загрузке внешнего и внешнего интерфейса WordPress, поэтому вам доступны все функции.

Вы все еще можете использовать AJAX в файле functions.php, как описано ниже. В WordPress есть специальные действия для AJAX, которые позволяют вам использовать его более просто.

Сначала вам нужно прикрепить функцию к вашему хуку AJAX следующим образом ...

// This will hook into both logged in and anonymous visitors
add_action( 'wp_ajax_my_header_cart_count', 'my_header_cart_count' );
add_action( 'wp_ajax_nopriv_my_header_cart_count', 'my_header_cart_count' );

function my_header_cart_count()
{
    echo WC()->cart->cart_contents_count();
    wp_die();
}

Вы также должны использовать код для ввода вашего JS в нижний колонтитул ...

add_action( 'wp_footer', 'my_header_cart_javascript' );

function my_header_cart_javascript() { ?>
    <script type="text/javascript" >
    jQuery(document).ready(function($) {

        var data = {
            'action': 'my_header_cart_count'
        };

        jQuery.post(ajaxurl, data, function(response) {
            // Inject the response into the containing span
            $('.cart-contents-count').html(response);
        });
    });
    </script> <?php
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...