Ошибка отправки формы с помощью get_template_part ()

Я столкнулся с интересной проблемой в отношении get_template_part().

Я создал страницу параметров темы (named sitewideSettings.php)

обычно я бы включил это в functions.php следующим образом:

include(TEMPLATEPATH."sitewideSettings.php");

, который отлично работает.

Но теперь я пытаюсь использовать get_template_part();

get_template_part('sitewideSettings');

, который также отлично работает, за исключением того, что при нажатии «update» для обновления настроек появляется сообщение об ошибке: «Вы действительно хотите это сделать? Повторите попытку».

«Повторите попытку» ссылки на страницу параметров темы и нажав кнопку «Обновить», вы вернетесь к сообщению об ошибке, которое возвращает вас к параметрам темы и круглым и круглым.

Ничего другого не изменилось, кроме использования get_template_part();

Кто-нибудь еще сталкивается с этой проблемой? Как вы обошли его? Я уверен, что это что-то простое и очевидное, но именно то, что полностью ускользает от меня.

(В обоих случаях создается не исключение nonce как nonce)

6 голосов | спросил Ashley G 14 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowTue, 14 Sep 2010 05:29:29 +0400 2010, 05:29:29

5 ответов


6

Я знаю, что вы говорите, что это не вопрос nonce, но это ясно. Это уведомление является по умолчанию сообщением «Это сообщение nonce not not out». Я не знаю точно, почему nonce терпит неудачу, но это то, что происходит.

Я бы дважды проверял, как ваши ноты создаются и проверяются. Если вы используете wp_nonce_field(), убедитесь, что оба значения действия и значения аргументов одинаковы. Кроме того, двойная проверка орфографии переменных или любые проблемы, связанные с областью, которые могут привести к сбою функции nonce.

ИЗМЕНИТЬ

Следуя своей настойчивости в том, что это не проблема nonce (что это такое. Проблема nonce вызвана проблемой области), вот что, вероятно, произошло. Включенные /требуемые файлы выполняются в области, в которой они включены. Я предполагаю, что вы используете переменную, чтобы создать либо действие nonce, либо имя nonce. Поскольку get_template_part() включает файл шаблона в область действия этой функции, он больше не выполняется в области обратного вызова отображения вашей учетной записи администратора. Вам либо нужно глобализовать эти переменные во всех местах, либо вам нужно использовать константы вместо переменных.

ответил John P Bloch 9 22010vEurope/Moscow11bEurope/MoscowTue, 09 Nov 2010 16:54:10 +0300 2010, 16:54:10
4

Пожалуйста, не используйте get_template_part () в Admin /Backend. Он был разработан для использования шаблонов (отображение темы, см. codex ), поэтому это предназначено для использования в шаблонах и шаблонах в рамках тем:

  

Справочник по функциям /получение части шаблона

     

Загрузите часть шаблона в шаблон   (кроме заголовка, боковой панели, нижнего колонтитула).   Легко повторить использование темы   разделы кода в удобном для   перегрузка для дочерних тем.

В действительности функция также включает общий исходный код, но то, что вы испытываете (как указал Джон), может быть связано с областью. Поскольку я не знаю вашего кода, я не могу сказать точно, если это точная причина проблемы, с которой вы сталкиваетесь (переменная область), поэтому я стараюсь, чтобы это было просто в моем ответе:

Функция просто не указана для замены в качестве стандартного PHP-кода, например, для написания страницы администратора.

Поэтому просто не используйте его, если для вашей страницы администратора, если вы действительно не знаете, что делаете.


Update:

Если вы хотите загрузить php-файл в глобальную область видимости в каталоге дочерних и родительских тем, вы можете использовать функцию, которая выполняет поиск файла для вас: locate_template () :

  

Получить имя файла шаблона с наивысшим приоритетом, который существует.

     

Ищет в STYLESHEETPATH ​​перед TEMPLATEPATH, чтобы темы, которые наследуются от родительской темы, могут просто перегружать один файл.

В данном примере include include(TEMPLATEPATH."sitewideSettings.php"); это можно записать как:

include(locate_template('sitewideSettings.php'));

Это позволяет вам контролировать, где и как включается файл (include /_once; require /_cone), и это предотвращает появление проблемы с объемом в вашем примере , которая нарушает механизм NONCE.


Сообщение «Пожалуйста, попробуйте еще раз», потому что wp-admin не может проверить запрос, а точнее так называемый # 14060 ). Чтобы узнать, что здесь происходит, наиболее эффективно отлаживать это в системе, где появляется ошибка, поскольку она может быть весьма специфичной, какая часть цепочки повреждена.

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

ответил hakre 9 22010vEurope/Moscow11bEurope/MoscowTue, 09 Nov 2010 21:21:37 +0300 2010, 21:21:37
0

Трудно сделать предположение, это целая лестница функций. get_template_part() вызывает locate_template(), который вызывает load_template(), который выполняет require.

Я предлагаю вам попробовать их снизу вверх, чтобы определить, является ли это get_template_part() точно или какая-то функция между ними.

ответил Rarst 14 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowTue, 14 Sep 2010 11:05:05 +0400 2010, 11:05:05
0

locate_template( array( 'sitewideSettings.php' ), true )

ответил zeo 14 +04002010-10-14T20:50:00+04:00312010bEurope/MoscowThu, 14 Oct 2010 20:50:00 +0400 2010, 20:50:00
0

Это более подробное объяснение первого ответа - т. е. «область действия - это проблема»

Моя простая визуализация get_template_part выглядит следующим образом:

function get_template_part($slug) {
  require("$slug.php");
}

Итак, если у вас есть следующее в sitewideSettings.php:

<?php
echo $nonce;
?>

Шаблон с включением:

<?php
$nonce = 'xxx';
include('sitewideSettings.php');
?>

Получает перевод (по PHP) на:

<?php
$nonce = 'xxx';
echo $nonce;
?>

Шаблон с get_template_part:

<?php
$nonce = 'xxx';
get_template_part('sitewideSettings');
?>

Переведено на:

<?php
$nonce = 'xxx';
get_template_part(
  echo $nonce;
);
?>

Итак, теперь что-либо в части шаблона обернуто внутри функции, и для любых переменных, которые у вас есть в вашей части шаблона, требуется global .

Таким образом, чтобы заставить его работать, вам понадобится global в файле sitewideSettings.php, который получит переведено на:

<?php
$nonce = 'xxx';
get_template_part(
  global $nonce;
  echo $nonce;
);
?>
ответил icc97 8 FebruaryEurope/MoscowbWed, 08 Feb 2012 18:29:48 +0400000000pmWed, 08 Feb 2012 18:29:48 +040012 2012, 18:29:48

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

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132