Обновление (поскольку вы дали некоторый контекст с отсутствующим кодом) :
Да, вы должны передать идентификатор заказа в самом начале сВаша страница благодарности (шаблон) .
Вам необходимо по-другому переосмыслить свой код, , поскольку вы не можете передать идентификатор заказа на renderForm()
функция. Идентификатор заказа необходимо передать через jQuery Ajax в нужную вам функцию PHP Wordpress Ajax (чтобы добавить в заказ пользовательские метаданные).
Еще одна ошибка - (2 раза) :
jQuery(document).ready(function() {
, которые должны быть вместо (поскольку вы используете JQuery Shorttand $
) :
jQuery(document).ready(function($) {
или (то же самое) более коротким способом:
jQuery(function($) {
Оригинальный ответ:
В вашем скрипте есть некоторые ошибки и упущения, например order Id , который необходимо передать через jQuery ajax в вашу функцию PHP Wordpress / Ajax, которая добавит пользовательские метаданные…
Также вы не предоставляете в своем коде отображаемыйкнопка вывода…
Итак, вот полный пример, основанный на вашем повторном коде, который отобразит кнопку на странице Заказ получен (спасибо) и добавит пользовательские метаданные в ваш заказ:
// PHP Wordpress AJAX: Add custom meta data to the Order
add_action("wp_ajax_adding_custom_meta", "adding_custom_order_metadata");
add_action("wp_ajax_nopriv_adding_custom_meta", "adding_custom_order_metadata");
function adding_custom_order_metadata() {
if( isset($_POST['order_id']) && $_POST['order_id'] > 0 ){
update_post_meta(esc_attr($_POST['order_id']), '_has_answered', 'Yes');
echo json_encode($_POST['order_id']);
}
die();
}
// Display a button on thankyou page (+ jQuery Ajax script)
add_action( 'woocommerce_thankyou', 'jquery_thank_you_page', 90, 1 );
function jquery_thank_you_page( $order_id ) {
// Display the button on thankyou page
echo '<a href="#" class="button alt" id="button">'.__("Update").'</a>';
// The jQuery script (Ajax)
?>
<script type="text/javascript">
jQuery(function($) {
$('body').on('click', '#button', function(e){
e.preventDefault();
$.ajax({
type: 'POST',
url: '<?php echo admin_url("admin-ajax.php");?>',
data: {
'action': 'adding_custom_meta',
'order_id': '<?php echo $order_id; ?>'
},
success: function(response){
console.log(response); // Just for testing
},
error: function(error){
console.log(error); // Just for testing
}
});
});
});
</script>
<?php
}
Код помещается в файл function.php вашей активной дочерней темы (или активнойEME). Протестировано и работает.
Использование функции update_post_meta()
является гораздо лучшей и более легкой альтернативой, чем вызов экземпляра объекта WC_Order
и использование после метода the save()
.
Я изменил пользовательский мета-ключ заказа с hasAnswered
на _has_answered
На странице "Заказ получен" , отображаемая кнопка (кнопкаИдентификатор заказа, см. в консоли):
В базе данных создаются пользовательские метаданные публикации: