Как добавить кнопку в виджет боковой панели?

Я новичок в WordPress и хочу добавить пользовательскую кнопку на панель администратора в целеуказатель тема. Я знаком с концепцией ловушки действий и уже успешно реализовал свою собственную ловушку действий с do_action_ref_array() и назвал это из functions.php с add_action(),

Подход 1 (поместить определение кнопки статически в php-файл)

Виджет боковой панели, к которому я хочу добавить дополнительную кнопку, встроен в файл ‘dashboard-page.php’. Вот выдержка из кода:

$pfmenu_output .= ($setup11_reviewsystem_check == 1) ? '<li><a href="'.$setup4_membersettings_dashboard_link.$pfmenu_perout.'ua=reviews"><i class="pfadmicon-glyph-377"></i> '. $setup29_dashboard_contents_rev_page_menuname.'</a></li>' : '';
$pfmenu_output .= '<li><a href="http://my.testsite.com/market"><i class="pfadmicon-glyph-476"></i> '. esc_html__('Car Market','pointfindert2d').'</a></li>';
$pfmenu_output .= '<li><a href="'.esc_url(wp_logout_url( home_url() )).'"><i class="pfadmicon-glyph-476"></i> '. esc_html__('Logout','pointfindert2d').'</a></li>';

Вторая строка — мой статический подход. Кнопка добавлена ​​в виджет боковой панели правильно. Но мне нужно поместить этот код в functions.php из моего Child-Theme чтобы сохранить его во время будущих процедур обновления.

Подход 2 (более динамичный с самоопределением action-hook)

Я также попытался добавить свой собственный хук действий вместо статического добавления кнопки (заменил вторую строку определением хука действий:

$pfmenu_output .= ($setup11_reviewsystem_check == 1) ? '<li><a href="'.$setup4_membersettings_dashboard_link.$pfmenu_perout.'ua=reviews"><i class="pfadmicon-glyph-377"></i> '. $setup29_dashboard_contents_rev_page_menuname.'</a></li>' : '';
do_action_ref_array( 'pf_add_widget_button', array(&$pfmenu_output) );
$pfmenu_output .= '<li><a href="'.esc_url(wp_logout_url( home_url() )).'"><i class="pfadmicon-glyph-476"></i> '. esc_html__('Logout','pointfindert2d').'</a></li>';

После этого я добавил add_action() позвони моей детской теме function.php и добавил туда кнопку, которая тоже отлично работает:

function swi_add_button_to_widget(&$pfmenu_output) {
$pfmenu_output .= '<li><a href="http://my.testsite.com/market"><i class="pfadmicon-glyph-476"></i> '. esc_html__('Car Market,'pointfindert2d').'</a></li>';
}
add_action( 'pf_add_widget_button', 'swi_add_button_to_widget' );

Определение проблемы

Но оба описанных выше подхода будут работать, пока я не обновлю тему PointFinder в первый раз, так как dashboard-page.php наиболее вероятно, будет переопределено во время обновления.

Я не нашел никаких готовых хуков действий, реализованных командой разработчиков тем, просматривая все файлы, ища do_action() а также do_action_ref_array(), Ничего такого…

Решение ?

Поэтому есть ли другой способ получить доступ к этому $pfmenu_output переменная из моей дочерней темы, чтобы добавить дополнительную кнопку?

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

5

Решение

Вариант 1: Копировать dashboard-page.php к вашей детской теме

Я только расширяюсь Комментарий Себастьяна. Вы можете скопировать весь dashboard-page.php файл (с помощью самостоятельно добавленного действия) в папку вашей дочерней темы. Затем вам придется искать место в родительской теме, где dashboard-page.php файл включен. Надеюсь, он включен в одну из родительских тем. стандартные шаблоны файлов. Затем вы просто копируете этот файл шаблона в свою дочернюю тему, чтобы переопределить его. Тогда вам придется изменить эту строку, которая включает в себя dashboard-page.php файл для включения того же файла в дочернюю папку.

Например, если page.php Файл шаблона имеет что-то вроде этого:

include (get_template_directory() . '/dashboard-page.php')

Вы можете скопировать page.php файл в вашей дочерней теме и измените эту строку следующим образом:

include (get_stylesheet_directory() . '/dashboard-page.php')

Обратите внимание, что get_stylesheet_directory() извлекает путь к папке дочерней темы и get_template_directory() извлекает путь к папке родительской темы.

Важный: Возможно, что dashboard-page.php файл не включен ни одним из стандартных файлов шаблонов, которые могут быть переопределены, но вместо этого включен другими нестандартными файлами шаблонов, которые включены в родительскую тему. В этом случае вам придется скопировать каждый включенный файл в dashboard-page.php файл. И убедитесь, что каждый include использует версию дочерней темы каждого файла.

Вариант 2: использовать Javascript / jQuery

Один из альтернативных подходов — использовать код JavaScript для вставки кнопки. Вы можете добавить код javascript в один из шаблонов дочерней темы, чтобы динамически изменять меню после загрузки страницы. Я взглянул на демонстрацию темы, и похоже, что элемент списка для боковой панели имеет класс с именем «pf-sidebar-menu». Вы можете просто добавить следующий код, который нацелен на этот класс и вставит вашу кнопку после первого элемента списка:

jQuery(".pf-sidebar-menu > li:nth-child(1)").after('<li><a href="http://my.testsite.com/market"><i class="pfadmicon-glyph-476"></i>Car Market</a></li>');
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<ul class="pf-sidebar-menu">
<li><a href="#"><i class="pfadmicon-glyph-377"></i>Something</a></li>
<li><a href="#"><i class="pfadmicon-glyph-476"></i>Logout</a></li>
</ul>
4

Другие решения

использование PHP Code Widget плагин

Виджет кода PHP

1