Я занимаюсь разработкой дочерней темы с использованием Wordpress 3.4.2 и версией разработки Framework от David Price . Это моя первая тема, и я относительно новичок в этом, поэтому я изучил Кодекс Wordpress и проверил регистрацию элементов в API.
Не вмешиваясь ни в какие внешние файлы вне моей темы, мне было интересно, есть ли способ изменить расположение страницы параметров темы в иерархии меню « Внешний вид» - поэтому, когда моя тема активирована, положение не похоже на первое изображение но нравится второе.
Я знаю, что вы можете создать меню (например, вкладка « Внешний вид », « Плагины» , « Пользователи» и т. Д.) Или подменю (« Темы» , « Виджеты» , « Меню» и т. Д.), Но как мне настроить подменю, скажем, «второе»? от верхней?
Из того, что я понял, где-то происходит вызов, и functions.php
после них размещаются любые другие дополнительные страницы в файле?
В моем файле functions.php:
// Add our "Theme Options" page to the Wordpress API admin menu.
if ( !function_exists( 'optionsframework_init' ) ) {
define( 'OPTIONS_FRAMEWORK_DIRECTORY', get_template_directory_uri() . '/inc/' );
require_once dirname( __FILE__ ) . '/inc/options-framework.php';
}
Спасибо.
источник
Warning: Invalid argument supplied for foreach() in /wp-content/themes/mythemename/functions.php on line 1444
Строка 1444:foreach ($submenu[$menus] as $index => $value){
иWarning: ksort() expects parameter 1 to be array, null given in /wp-content/themes/mythemename/functions.php on line 1468
строка 1468:ksort($submenu[$menus]);
Ответы:
Вот пример;
Сначала, чтобы выяснить порядок пунктов подменю на основе его ключа массива, вы можете выполнить
var_dump
глобальную переменную $ submenu, которая выведет следующее;(Я использую меню сообщений и подменю в качестве примера)
Мы видим, что мой элемент подменю добавляется в массив с ключом 17 после элементов по умолчанию.
Например, если я хочу добавить свой элемент подменю, сразу после пункта подменю « Все сообщения» мне нужно сделать это, установив ключ массива на 6, 7, 8 или 9 (что угодно после 5 и до 10 соответственно).
Вот как ты это делаешь ...
Результат,
... попробуйте и дайте нам знать, как вы идете!
Обновление 1:
Добавьте это в ваш файл functions.php;
Мое обновление включает в себя несколько более простой способ управления настройкой позиции вашего меню, вам нужно только указать название вашей страницы подменю и нужную позицию в меню.
Однако, если вы выберете страницу подменюЧтобы обойти это, пример Кайзера предоставляет некоторые базовые проверки для этого.$location
, аналогичную существующей клавише, она заменит эту клавишу на вашу, поэтому пункт меню исчезнет с вашим пунктом меню на своем месте. Увеличьте или уменьшите число, чтобы правильно упорядочить меню, если это так. Аналогично, если кто-то устанавливает плагин, который воздействует на ту же самую область меню и для которого имеет то же самое,$location
что и ваш элемент подменю, то возникнет та же проблема.Обновление 2:
Я добавил дополнительный блок кода, который проверяет все существующие ключи в массиве по нашему желанию,
$location
и если совпадение будет найдено, мы будем увеличивать наше$location
значение на1
, чтобы избежать переопределения пунктов меню. Это код, ответственный за это,Обновление 3: (исправлен скрипт, позволяющий сортировать несколько элементов подменю)
В приведенном выше примере вы можете выбрать несколько подменю и несколько элементов для каждого подменю, задав соответствующие параметры в
$target_menu
переменной, которая содержит многомерный массив значений.Эта ревизия предотвратит перезапись элементов подменю, если они имеют одинаковый ключ (положение), поскольку она будет циклически проходить, пока не найдет доступный ключ (положение), который не существует.
источник
Warning: Invalid argument supplied for foreach() in /wp-content/themes/mythemename/functions.php on line 1444
Строка 1444:foreach ($submenu[$menus] as $index => $value){
иWarning: ksort() expects parameter 1 to be array, null given in /wp-content/themes/mythemename/functions.php on line 1468
строка 1468:ksort($submenu[$menus]);
Меню администратора (и его проблемы)
Поскольку в меню администратора отсутствуют какие-либо хуки и общедоступный API (который позволяет перемещать элементы), вы должны использовать некоторые обходные пути. Следующий ответ показывает вам, что ожидает вас в будущем и как вы можете обойти это, пока у нас есть текущее состояние ядра.
Прежде всего, я должен отметить, что scribu работает над патчем для меню администратора, который должен значительно облегчить работу с ним. Нынешняя структура довольно запутана и я написал об этом статью , которая скоро устареет. Ожидайте, что WP 3.6 полностью изменит ситуацию.
Кроме того, есть еще один момент: вам больше не следует использовать страницы параметров для тем. Для этого есть - в настоящее время - « Theme Customizer» .
Плагин
Я написал плагин, который проверяет это на странице параметров темы по умолчанию для страницы параметров TwentyEleven / Ten. Как видите, нет реального API, который бы разрешал любую позицию. Таким образом, мы должны перехватить глобальное.
Вкратце: просто следуйте комментариям и посмотрите на уведомления администратора, которые я добавил, чтобы дать вам отладочную информацию.
Удачи и приятного времяпровождения.
источник
Пользовательские фильтры
Для этого есть еще одна возможность. Не спрашивайте меня, почему я раньше не думал об этом. Во всяком случае, есть фильтр, предназначенный для пользовательского порядка меню. Просто установите его, чтобы
true
разрешить индивидуальный заказ. Тогда вы получили второй крючок для заказа пунктов главного меню. Там мы просто перехватываемglobal $submenu
и переключаем пункты нашего подменю.В этом примере перемещается элемент «Меню» над элементом « Виджеты», чтобы продемонстрировать его функциональность. Вы можете настроить его так, как вам нравится.
источник
function wpse70916_custom_submenu_order( $menu )
скажем, изменить порядок не только меню , но и темы Опции , виджеты , редактор и т. Д. Делают его достаточно гибким, а также чтобы элементы не перекрывали друг друга? Спасибо.