обновить мету поста wordpress

! проблема решена, новая проблема....

                    <?php
if ( isset( $_POST['submit'] ) )
    { //if nonce check succeeds.
        global $post;
        $postid = $auto->ID;
        $data = $_POST['doors'];
        update_post_meta($postid, 'doors', $data );

}


$doors = get_post_meta($auto->ID, 'doors', true);
?>

<form method="post" action="">
   <input type='text' name='doors' value='<?php echo $doors ?>' />
   <input type='submit' value='save' name="submit"/>
</form>

Теперь это сработало, но моя новая проблема заключается в том, что все поля получают одинаковое значение...., посмотрите на img http://oi58.tinypic.com/2qtd5p4.jpg


person Philip ee    schedule 01.08.2014    source источник
comment
global используется только в функции (или, может быть, ваш файл включен внутри функции?)   -  person ceadreak    schedule 01.08.2014
comment
почему это должно быть? Вы никогда не проходите $data, поэтому все, что вы отправляете, просто теряется.   -  person Marc B    schedule 01.08.2014
comment
@MarcB ааааа, правда! ты знаешь, как это изменить? :)   -  person Philip ee    schedule 01.08.2014
comment
это связано с просмотром одного поста или только с отдельной страницей?   -  person David    schedule 01.08.2014
comment
эй, это отдельная страница @David   -  person Philip ee    schedule 01.08.2014
comment
и как вы решаете, какие мета сообщения вы обновляете? Или вы просто хотите сохранить значение в базе данных, но не привязать его к какому-либо сообщению?   -  person David    schedule 01.08.2014
comment
я не знаю как, но он отображает значение двери на входе из $doors = get_post_meta($auto-›ID, 'doors', true); ‹?php эхо $двери ?›   -  person Philip ee    schedule 01.08.2014
comment
авто и автомобиль :) @KaloyanIvanov   -  person Philip ee    schedule 01.08.2014
comment
Теперь это сработало, но моя новая проблема заключается в том, что все поля получают одинаковое значение...., посмотрите на img oi58. tinypic.com/2qtd5p4.jpg   -  person Philip ee    schedule 01.08.2014
comment
это похоже на петлю. Откуда вы берете каждую строку? поместите этот код там.   -  person David    schedule 02.08.2014
comment
@David, у тебя есть файл pastebin.com/LzBGbKkM   -  person Philip ee    schedule 04.08.2014


Ответы (1)


хорошо, ваша проблема в том, что каждый цикл обновляет каждый элемент. Это потому, что вы проверяете, есть ли значение для $_POST, обновите его. Вам нужно установить идентификатор, чтобы он знал, какой пост обновлять.

например, а идентификатор сообщения в поле ввода.

<input type='text' name='doors[<?php echo $auto->ID; ?>]' value='<?php echo isset($doors) ? $doors : ''; ?>' />

то вы можете обновить эту переменную.

if ( isset( $_POST['doors'] ) ){  
// verify nounce prob a good idea 
    foreach($_POST['doors'] as $item=>$key) {
        $id= sanitize_text_field($item);
        update_post_meta( $id, 'doors', sanitize_text_field( $key ) );
    }   
}

обратите внимание, что этот код $_POST появляется в цикле (между оператором foreach и endforeach). переместите это за пределы цикла в верхней части страницы, чтобы оно всегда выполнялось. Теперь вы также можете обновлять несколько значений при каждой отправке. Вам также нужно будет каким-то образом проверить значения, чтобы кто-то не изменил мета-мету сообщения в любом сообщении, которое им нравится (все, что им нужно сделать, это post[doors][postid], чтобы изменить любое значение дверей).

person David    schedule 04.08.2014
comment
если вы обновите свой файл на pastebin, я посмотрю. - person David; 04.08.2014
comment
можно ли сделать кнопку сброса? - person Philip ee; 04.08.2014
comment
хорошо, вам нужно добавить эту строку чуть выше ваших входных данных $doors= get_post_meta($auto-›ID, 'doors', true); что значит кнопка сброса? - person David; 04.08.2014
comment
это не сработало? мой ввод будет скрыт, как я могу получить кнопку очистки, чтобы очистить значение? :) - person Philip ee; 04.08.2014