Когда объект передается по значению, он обычно помещается в стек. Вложение чего-то в стек требует знания того, насколько оно велико. При использовании полиморфизма вы знаете, что входящий объект реализует определенный набор функций, но вы, как правило, не имеете представления о размере объекта (и не обязательно, что это является частью выгоды). Таким образом, вы не можете поместить его в стек. Однако вы всегда знаете размер указателя.
Теперь не все идет в стек, и есть другие смягчающие обстоятельства. В случае виртуальных методов указатель на объект также является указателем на vtable (ы) объекта, которые указывают, где находятся методы. Это позволяет компилятору находить и вызывать функции независимо от того, с каким объектом он работает.
Другая причина в том, что очень часто объект реализуется вне вызывающей библиотеки и выделяется совершенно другим (и, возможно, несовместимым) менеджером памяти. Он также может иметь членов, которые не могут быть скопированы, или могут вызвать проблемы, если они были скопированы с другим менеджером. Возможны побочные эффекты при копировании и всевозможные другие осложнения.
В результате указатель - это единственный бит информации об объекте, который вы действительно правильно понимаете, и предоставляет достаточную информацию для выяснения где нужны другие бит.
Ok вставьте этот код в свои функции. Вы должны заменить переменную $ your_ajax_page_slug названием своей страницы, для которой вы хотите отключить функцию перенаправления на тележку. Убедитесь, что у вас есть опция «Включить AJAX, чтобы добавить в корзину кнопки на архивах», которые были отмечены в настройках.
add_filter( 'woocommerce_get_script_data', 'modify_woocommerce_get_script_data', 20, 2 );
function modify_woocommerce_get_script_data ( $params, $handle ) {
global $wp;
$page_slug = '';
$your_ajax_page_slug = 'your-page-slug';
$current_url = home_url( $wp->request );
// Break the URL by the delimiter
$url_pieces = explode('/', $current_url);
// Get the page slug
if( is_array( $url_pieces ) )
$page_slug = end( $url_pieces );
if( $handle == 'wc-add-to-cart' && $page_slug == $your_ajax_page_slug ) {
$params['cart_redirect_after_add'] = false;
}
return $params;
}