WordPress в цикле foreach, обновляющий мета значения

Я сделал цикл foreach, чтобы получить пользовательский тип сообщения для внешнего интерфейса. И у меня есть одно настраиваемое поле с именем ‘order_staatus’. Когда я смотрю передний конец моего списка в цикле, я хочу добавить одну кнопку, что изменит этот определенный пост ‘order_staatus’ на другое значение … мой код ..

<? foreach ( $postslist as $post ) :
setup_postdata( $post );
?>

<div class="profile_order_row">
<a href="<?php the_permalink(); ?>"> <?php the_author(); ?> <?php the_title(); ?></a>
<?php
Global $post;
if ( isset( $_POST['submit'] ) )
{
if( ! isset( $post ) ) {
echo 'Post not set';
die();
}
else if( ! isset( $_POST['staatus'] ) && ! empty( $_POST['staatus'] ) ){
echo 'Error';
die();
}

$postid = $_POST['post_id'];
update_post_meta($postid,'order_staatus','1');
}

$staatus = get_post_meta($post->ID, 'order_staatus', true);

echo print_r($staatus);
?>

<form method="post" action="">
<input type="hidden" name="post_id" value="'.$post->ID.'" />
<input type='text' name='staatus' value='<? echo $staatus ?>' />
<input type='submit' value='save' />
</form>

</div><?php endforeach; wp_reset_postdata(); ?>

0

Решение

Я не думаю, что проблема с функцией update_post_meta, Я думаю, что более вероятная проблема заключается в том, что $_POST['submit'] не установлен. При отправке формы значение кнопки отправки не отправляется. Атрибут value предназначен просто для назначения текста кнопки.

Я бы переписал блок кода IF следующим образом:

  if ( isset( $_POST ) )
{

if( ! isset( $_POST['staatus'] ) && ! empty( $_POST['staatus'] ) ){
echo 'Error';
die();
}

$postid = sanitize_text_field($_POST['post_id']);
update_post_meta($postid,'order_staatus','1');
}

Обратите внимание, что я удалила isset($post) проверьте, потому что вы запускаете этот код внутри foreach ( $postslist as $post ) который определяет $post поэтому он всегда будет установлен в этом цикле.

Я также добавил функцию sanitize_text_field() санировать post_id, Это важная мера безопасности, позволяющая избежать внедрения SQL. Любой пользовательский ввод, включая $ _POST, может содержать опасные данные и должен быть очищен перед использованием.

Надеюсь это поможет!

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]