Вот полное решение. В основном проблема заключается в том, что вы не вошли в WP в Edge, поэтому при создании сообщения с использованием wp_insert_post
WordPress не имеет представления, к какому аккаунту следует прикрепить это сообщение.
function wpshout_frontend_post() {
wpshout_save_post_if_submitted();
?>
<div>
<div>
RESERVATION
</div>
<form id="new_post" class = 'datcho' name="new_post" method="post">
<input type = 'text' name = 'ten' required>
<input type = 'tel' name = 'sdt' required>
<input type = 'number' name = 'num' min='1' max = '10' required>
<input type = 'date' name = 'ngay' required>
<input type = 'time' name = 'time' value = '13:00' min='9:00' max='21:00' required>
<?php wp_nonce_field( 'wps-frontend-post' ); ?>
<input type="submit" value="Reservation" id="submit" name="submit"/>
</form>
</div>
<?php
}
function wpshout_save_post_if_submitted() {
// Stop running function if form wasn't submitted
if ( !isset( Вот полное решение. В основном проблема заключается в том, что вы не вошли в WP в Edge, поэтому при создании сообщения с использованием wp_insert_post
WordPress не имеет представления, к какому аккаунту следует прикрепить это сообщение. [110]POST['ten']) ) {
return;
}
// Check that the nonce was set and valid
if( !wp_verify_nonce(
Вот полное решение. В основном проблема заключается в том, что вы не вошли в WP в Edge, поэтому при создании сообщения с использованием wp_insert_post
WordPress не имеет представления, к какому аккаунту следует прикрепить это сообщение. [110]POST['_wpnonce'], 'wps-frontend-post') ) {
echo 'Did not save because your form seemed to be invalid. Sorry';
return;
}
// Do some minor form validation to make sure there is content
// Add the content of the form to $post as an array
$title = wp_strip_all_tags(
Вот полное решение. В основном проблема заключается в том, что вы не вошли в WP в Edge, поэтому при создании сообщения с использованием wp_insert_post
WordPress не имеет представления, к какому аккаунту следует прикрепить это сообщение. [110]POST['ten']);
$author_id = 1; // You can change it with your User ID
$post = array(
'post_title' => $title,
'post_content' => $title,
'post_status' => 'draft',
'post_type' => 'datcho'
'post_author' => $author_id
);
$eror = wp_insert_post($post,true);
if($eror){
$sdt = wp_strip_all_tags(
Вот полное решение. В основном проблема заключается в том, что вы не вошли в WP в Edge, поэтому при создании сообщения с использованием wp_insert_post
WordPress не имеет представления, к какому аккаунту следует прикрепить это сообщение. [110]POST['sdt']);
$ngay = wp_strip_all_tags(
Вот полное решение. В основном проблема заключается в том, что вы не вошли в WP в Edge, поэтому при создании сообщения с использованием wp_insert_post
WordPress не имеет представления, к какому аккаунту следует прикрепить это сообщение. [110]POST['ngay']);
$time = wp_strip_all_tags(
Вот полное решение. В основном проблема заключается в том, что вы не вошли в WP в Edge, поэтому при создании сообщения с использованием wp_insert_post
WordPress не имеет представления, к какому аккаунту следует прикрепить это сообщение. [110]POST['time']);
$num = wp_strip_all_tags(
Вот полное решение. В основном проблема заключается в том, что вы не вошли в WP в Edge, поэтому при создании сообщения с использованием wp_insert_post
WordPress не имеет представления, к какому аккаунту следует прикрепить это сообщение. [110]POST['num']);
add_post_meta($eror, 'sdt', $sdt);
add_post_meta($eror, 'ngay', $ngay);
add_post_meta($eror, 'time', $time);
add_post_meta($eror, 'num', $num);
echo 'Saved your post successfully! :)';
}else {
echo "something wrong";
}
}
В в большинстве случаев: более чем достаточно быстро. Например, если вы используете это для создания объекта-обертки DAL, время, необходимое для создания объекта с помощью отражения, будет незначительным по сравнению со временем, которое необходимо для подключения к сети. Поэтому его оптимизация была бы пустой тратой времени.
Если вы используете отражение в узком цикле, есть хитрости для его улучшения:
где T: new ()
и MakeGenericType
) Delegate.CreateDelegate
(для типизированного делегата; не работает для конструкторов) Reflection.Emit
- хардкорное выражение
( как Delegate.CreateDelegate
, но более гибкий и работает для конструкторов) Но для ваших целей CreateInstance
прекрасно подойдет. Придерживайтесь этого и сохраняйте вещи простыми.
Редактировать: пока остается вопрос об относительной эффективности, и хотя остается самая важная вещь, «измерить ее», я должен пояснить некоторые из вышеперечисленных. Иногда ... это имеет значение . Измерьте в первую очередь. Однако, если вы обнаружите, что слишком медленно , вы можете посмотреть на что-то вроде FastMember , который спокойно выполняет весь код Reflection.Emit
в фоновом режиме. , чтобы дать вам хороший простой API; например:
var accessor = TypeAccessor.Create(type);
List<object> results = new List<object>();
foreach(var row in rows) {
object obj = accessor.CreateNew();
foreach(var col in cols) {
accessor[obj, col.Name] = col.Value;
}
results.Add(obj);
}
, который прост, но будет очень быстрым. В конкретном примере, который я упоминаю об оболочке DAL - если вы делаете это много, рассмотрите что-то вроде dapper , который снова выполняет весь код Reflection.Emit
в фоновом режиме, чтобы предоставить вам максимально быстрый, но простой в использовании API:
int id = 12345;
var orders = connection.Query<Order>(
"select top 10 * from Orders where CustomerId = @id order by Id desc",
new { id }).ToList();
Кроме того, что вы переходите по ссылкам, приведенным в других ответах, и убедитесь, что вы не пишете «патологически неверный» код, тогда для меня лучший ответ на это - проверить его самостоятельно.
Только вы знаете, где находятся узкие места, сколько раз ваш код отражения будет пользовательским, будет ли код отражения замкнутым циклом и т. д. Вы знаете свой бизнес-пример, сколько пользователей получит доступ к вашему сайту, каковы требования к производительности.
Однако, учитывая фрагмент кода, который вы здесь показали, я могу предположить, что затраты на рефлексию не будут серьезной проблемой.
Функции веб-тестирования и тестирования производительности VS.NET должны значительно упростить измерение производительности этого кода.
Если вы не используете отражение, как будет выглядеть ваш код? Какие у него будут ограничения? Может случиться так, что вы не сможете жить с теми ограничениями, с которыми столкнетесь, если удалите код отражения. Возможно, стоит попытаться разработать этот код без размышлений, чтобы увидеть, возможно ли это или альтернатива желательна.
Он медленнее по сравнению с неотражающим кодом. Важно не то, насколько он медленный, а его медленный , где он имеет значение . Например, если вы создаете экземпляры объектов, используя отражение в веб-среде, где ожидаемая конкуренция может возрасти до 10 КБ, это будет медленно. 1239 Во всяком случае, хорошо не беспокоиться о производительности заранее. Если что-то идет медленно, вы всегда можете ускорить их, если вы правильно спроектировали вещи, чтобы те части, которые вы ожидали, могли нуждаться в оптимизации в будущем, были локализованы.
Вы можете проверить эту знаменитую статью, если вам нужно ускорить :
Динамический ... но быстрый: Повесть о трех обезьянах, волке и классах DynamicMethod и ILGenerator
Хорошо, что вы нашли свое решение. Но это интересная проблема. Вызов метода с помощью отражения примерно в 3 раза медленнее, чем обычным способом. Это не проблема, если вы делаете это один раз или в некритических ситуациях. Если вы используете его 10 000 раз в критичном по времени методе, я бы подумал об изменении реализации.
Я делал что-то похожее, пока не начал играть с IoC. Я бы использовал определение объекта Spring для указания поставщика данных - SQL, XML или Mocks!