Задать вопрос
@sk8er_boi

Внутри значения атрибута не отрабатывает шорткод?

Доброго дня!

Есть страница, созданная в движке вордпресса. Есть обработка шорткодов. Один и тот же шорткод для примера вставлен в разные части страницы. Первый раз обработка происходит, второй - нет.

Страница в движке

В шестой строке и в поле ввода фамилии (value) шорткод [get_errors]
<form data-name="fn_wp_insert_user" method="post">
	<table class="noborder">
		<tbody>
			<tr>
				<td class="aligncenter" colspan="2">
					<div id="response">[get_errors]</div></td>
			</tr>
			<tr>
				<td><label for="email">* Email</label></td>
				<td><input id="email" name="user_email" required="" type="email" autofocus="" data-required="1" /></td>
			</tr>
			<tr>
				<td><label for="password">* Пароль</label></td>
				<td><input id="password" name="user_pass" required="" type="password" data-required="1" /></td>
			</tr>
			<tr>
				<td><label for="confirm">* Повторите пароль</label></td>
				<td><input id="confirm" name="confirm" required="" type="password" data-required="1" /></td>
			</tr>
			<tr>
				<td><label for="last_name">* Фамилия</label></td>
				<td><input id="last_name" name="last_name" required="" type="text" data-required="1" value="[get_errors]" /></td>
			</tr>
			<tr>
				<td><label for="first_name">* Имя</label></td>
				<td><input id="first_name" name="first_name" required="" type="text" data-required="1" /></td>
			</tr>
			<tr>
				<td><input id="remember" name="remember" type="checkbox" /></td>
				<td><label for="remember">Запомнить меня</label></td>
			</tr>
			<tr>
				<td class="aligncenter" colspan="2">
					<div class="button"><button class="fa fa-unlock fa-padding-right-before" name="fn_action" type="submit" value="fn_wp_insert_user">Зарегистрироваться</button></div></td>
			</tr>
			<tr>
				<td class="aligncenter" colspan="2">
					<div class="button"><a class="fa fa-sign-in fa-padding-right-before" href="/user/login/" data-action="fn_get_page_login">Войти</a> <a class="fa fa-question fa-padding-right-before" href="/user/remind/" data-action="fn_get_page_remind">Забыли пароль?</a></div></td>
			</tr>
		</tbody>
	</table>
</form>

Обработка кода, например
add_shortcode('get_errors', function($atts) {
	global $errors;
	$html = null;
	$error_list = (object)array('error' => null, 'message' => null, 'success' => null);
	foreach ($errors->error_data as $key => $value) {
		$error_list->$value[] = current($errors->errors[$key]); // $error_list = (object){'error' => {...}, 'message' => {...}, 'success' => {...}}
	}
	foreach ($error_list as $error_name => $error_class) {
		if ($error_class) {
			$html .= '<p class="' . $error_name . '">';
			foreach ($error_class as $error) {
				$html .= $error . '<br />';
			}
			$html .= '</p>';
		}
	}
	return $html;
});

Результат
<form data-name="fn_wp_insert_user" method="post">
<table class="noborder">
<tbody>
<tr>
<td class="aligncenter" colspan="2">
<div id="response"><p class="error">Этот email-адрес уже используется. Пожалуйста, воспользуйтесь формой восстановления пароля или выберите другой адрес<br />Минимальная длина пароля - 8 символов<br />Поле &laquo;Фамилия&raquo; заполнено некорректно<br />Поле &laquo;Имя&raquo; заполнено некорректно<br /></p></div>
</td>
</tr>
<tr>
<td><label for="email">* Email</label></td>
<td><input id="email" name="user_email" required="" type="email" autofocus="" data-required="1" /></td>
</tr>
<tr>
<td><label for="password">* Пароль</label></td>
<td><input id="password" name="user_pass" required="" type="password" data-required="1" /></td>
</tr>
<tr>
<td><label for="confirm">* Повторите пароль</label></td>
<td><input id="confirm" name="confirm" required="" type="password" data-required="1" /></td>
</tr>
<tr>
<td><label for="last_name">* Фамилия</label></td>
<td><input id="last_name" name="last_name" required="" type="text" data-required="1" value="[get_errors]" /></td>
</tr>
<tr>
<td><label for="first_name">* Имя</label></td>
<td><input id="first_name" name="first_name" required="" type="text" data-required="1" /></td>
</tr>
<tr>
<td><input id="remember" name="remember" type="checkbox" /></td>
<td><label for="remember">Запомнить меня</label></td>
</tr>
<tr>
<td class="aligncenter" colspan="2">
<div class="button"><button class="fa fa-unlock fa-padding-right-before" name="fn_action" type="submit" value="fn_wp_insert_user">Зарегистрироваться</button></div>
</td>
</tr>
<tr>
<td class="aligncenter" colspan="2">
<div class="button"><a class="fa fa-sign-in fa-padding-right-before" href="/user/login/" data-action="fn_get_page_login">Войти</a> <a class="fa fa-question fa-padding-right-before" href="/user/remind/" data-action="fn_get_page_remind">Забыли пароль?</a></div>
</td>
</tr>
</tbody>
</table>
</form>

  • Вопрос задан
  • 47 просмотров
Подписаться 1 Простой 2 комментария
Решения вопроса 1
@sk8er_boi Автор вопроса
Вопрос решён путём генерации всего поля через шорткод. Например,

add_shortcode('get_nonce', function($atts) { // генерация nonce
	return '<input type="hidden" name="extra_fields_nonce" value="' . wp_create_nonce(__FILE__) . '" />';
});
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
iamd503
@iamd503
Верстальщик
Мало знаком с движком, но посмотрите в functions.php где регистрируется шорткод. Может там стоит "показывать только в определенном шаблоне". Или типа того.
Ещё тут можно посмотреть
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы