Ich bin ziemlich neu in WordPress und möchte dem Admin-Dashboard in der eine benutzerdefinierte Schaltfläche hinzufügen PointFinder Thema. Ich kenne das Action-Hook-Konzept und habe bereits erfolgreich meinen eigenen Action-Hook mit umgesetzt do_action_ref_array()
und nannte es von der functions.php
mit add_action()
.
Ansatz 1 (Button-Definition statisch in php-Datei einfügen)
Das Ziel-Sidebar-Widget, bei dem ich eine zusätzliche Schaltfläche hinzufügen möchte, ist in der Datei ‚dashboard-page.php‘ eingebaut. Hier ein Auszug des Codes:
$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>';
Die zweite Linie ist mein statischer Ansatz. Die Schaltfläche wird korrekt zum Seitenleisten-Widget hinzugefügt. Aber ich muss diesen Code zum setzen functions.php
von meinen Child-Theme
um sie bei zukünftigen Update-Vorgängen zu erhalten.
Ansatz 2 (dynamischer mit einem selbstdefinierten Action-Hook)
Ich habe auch versucht, meinen eigenen Action-Hook hinzuzufügen, anstatt die Schaltfläche statisch hinzuzufügen (ersetzte die zweite Zeile durch eine Action-Hook-Definition:
$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>';
Danach fügte ich eine hinzu add_action()
Aufruf zu meinem Child-Theme function.php
und dort den Button hinzugefügt, der auch gut funktioniert:
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' );
Problem Definition
Aber beide oben beschriebenen Ansätze funktionieren nur, bis ich das PointFinder-Design zum ersten Mal aktualisiere dashboard-page.php
wird höchstwahrscheinlich während des Updates überschrieben.
Ich habe keine vorgefertigten Action-Hooks gefunden, die vom Designentwicklungsteam implementiert wurden, als ich alle gesuchten Dateien durchsucht habe do_action()
und do_action_ref_array()
. Nichts…
Lösung ?
Gibt es daher eine andere Möglichkeit, darauf zuzugreifen $pfmenu_output
Variable aus meinem Child-Theme heraus, um einen zusätzlichen Button hinzuzufügen?
Bin ich völlig hängengeblieben bei den Theme-Entwicklern nicht einige vorgefertigte Action-Hooks für diesen speziellen Zweck einbauen?
Möglichkeit 1: Kopieren dashboard-page.php
zu deinem Child-Theme
Ich erweitere nur Sebastians Kommentar. Du könntest das ganze kopieren dashboard-page.php
Datei (mit deinem selbst hinzugefügten Action-Hook) in deinen Child-Theme-Ordner. Dann müssen Sie im übergeordneten Thema nach der Stelle suchen, an der die dashboard-page.php
Datei ist enthalten. Hoffentlich ist es in einem der übergeordneten Themen enthalten Standard-Vorlagendateien. Dann kopierst du diese Vorlagendatei einfach in dein Child-Theme, um sie zu überschreiben. Dann müssten Sie die Zeile ändern, die die enthält dashboard-page.php
file, um dieselbe Datei stattdessen in den untergeordneten Ordner aufzunehmen.
Wenn zum Beispiel die page.php
Template-Datei sieht in etwa so aus:
include (get_template_directory() . '/dashboard-page.php')
Sie können die kopieren page.php
Datei zu deinem Child Theme und ändere diese Zeile wie folgt:
include (get_stylesheet_directory() . '/dashboard-page.php')
Beachten Sie, dass get_stylesheet_directory()
Ruft den Pfad zum untergeordneten Themenordner ab und get_template_directory()
Ruft den Pfad zum Ordner des übergeordneten Designs ab.
Wichtig: Es ist möglich, dass die dashboard-page.php
Die Datei ist nicht in einer der Standard-Vorlagendateien enthalten, die überschrieben werden können, sondern in anderen Nicht-Standard-Vorlagendateien, die im übergeordneten Design enthalten sind. In diesem Fall müssen Sie jede enthaltene Datei nach unten kopieren dashboard-page.php
Datei. Und stellen Sie sicher, jeder include
verwendet die Child-Theme-Version jeder Datei.
Option 2: Verwenden Sie Javascript/jQuery
Ein alternativer Ansatz wäre die Verwendung von Javascript-Code zum Einfügen der Schaltfläche. Du könntest JavaScript-Code zu einer deiner Child-Theme-Vorlagen hinzufügen, um das Menü nach dem Laden der Seite dynamisch zu ändern. Ich habe mir eine Demo des Themas angesehen und es sieht so aus, als hätte das Listenelement für die Seitenleiste eine Klasse namens “pf-sidebar-menu”. Sie könnten einfach den folgenden Code hinzufügen, der auf diese Klasse abzielt und Ihre Schaltfläche nach dem ersten Listenelement einfügt:
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>
FYI, eine einfache Möglichkeit, den obigen Code zu Ihrer Website hinzuzufügen, wäre, Folgendes zu Ihrer Website hinzuzufügen untergeordnete Themen functions.php-Datei. Dadurch wird ein Skript-Tag in der Fußzeile Ihrer Website mit dem obigen Code erstellt. Möglicherweise müssen Sie zusätzliche Überprüfungen hinzufügen, um eine bestimmte Seite oder bestimmte Seiten anzusprechen.
<?php
function js_add_sidebar_button() {
?>
<script type="text/javascript">
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>
<?php
}
add_action( 'wp_footer', 'js_add_sidebar_button' );
verwenden PHP Code Widget
Plugin
PHP-Code-Widget
Warum bearbeitest du nicht einfach die Datei dashboard-page.php aus deinem Child-Theme?
– Sebastian Kaczmarek
24. Februar 2017 um 9:57 Uhr
Ich mache mir nicht die Mühe, Dateien zu durchsuchen, im Front- und Backend, wenn Sie Simply Show Hooks installieren, können Sie alle Hooks und Filter auf Ihrer Website und in Ihrem Admin sehen. Dann können Sie einen in der Nähe finden, wenn Sie einen bestimmten nicht finden können, und Prioritäten verwenden, um ihn über oder unter einem anderen Bereich zu platzieren.
– Christine
25. Februar 2017 um 0:39 Uhr
Warum fügst du die Schaltfläche im Theme oder Child-Theme hinzu? Erstellen Sie ein Plugin
– Christine
25. Februar 2017 um 0:42 Uhr
Danke für die zahlreichen Rückmeldungen. Ich werde versuchen, alle Ihre Ideen zu verstehen. Es wird einige Zeit dauern, aber ich werde Ihnen allen antworten.
– salocinx
27. Februar 2017 um 14:49 Uhr
@SebastianKaczmarek: Wenn ich die kopiere
dashboard-page.php
und seine Ordnerstruktur zu meinem Child-Theme hinzufügt, wird es nicht aktualisiert, wenn der Herausgeber irgendetwas in dieser Datei ändert/aktualisiert, richtig?– salocinx
27. Februar 2017 um 14:51 Uhr