Wie füge ich eine Schaltfläche zu einem Seitenleisten-Widget hinzu?

Lesezeit: 7 Minuten

Benutzer-Avatar
salocinx

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?

  • 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


Benutzer-Avatar
Höhle Johnson

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' );

  • Option 2 ist weniger umständlich.

    – Allen

    27. Februar 2017 um 13:09 Uhr

  • Vielen Dank bisher! Ich werde versuchen, Ihre Vorschläge umzusetzen und mich so schnell wie möglich zurückmelden. Eine Frage vorab: Deine Option 1 wird den Fall nicht berücksichtigen, dass die dashboard-page.php könnte vom Verlag aktualisiert werden – richtig?

    – salocinx

    27. Februar 2017 um 15:08 Uhr


  • @salocinx Ja das ist richtig. Es ist möglich, dass neue Funktionen hinzugefügt werden dashboard-page.php die auf Ihrer Website nicht verfügbar ist, da Sie eine alte Kopie dieser Datei verwenden. In diesem Fall hat Allen hier wahrscheinlich Recht, Option 2 ist weniger umständlich und weniger “zerstörerisch” im Falle zukünftiger Updates.

    – Höhle Johnson

    27. Februar 2017 um 17:23 Uhr

  • @salocinx Ich habe wahrscheinlich das falsche Wort verwendet, als ich destruktiv sagte. Ich meinte, dass es mit zukünftigen Updates besser kompatibel ist. Ich glaube nicht, dass die erste Methode tatsächlich etwas kaputt macht.

    – Höhle Johnson

    27. Februar 2017 um 17:34 Uhr

  • @KodosJohnson: Du bist ein Genie und du hast wirklich meine Gedanken gelesen 🙂 Ich habe gerade darüber nachgedacht, wie ich den jQuery-Aufruf integrieren kann. Ich kenne mich mit Assembler bis Java aus, aber Webentwicklung ist mir immer noch ein Rätsel. Vielen Dank!

    – salocinx

    27. Februar 2017 um 18:29 Uhr


verwenden PHP Code Widget Plugin

PHP-Code-Widget

1353330cookie-checkWie füge ich eine Schaltfläche zu einem Seitenleisten-Widget hinzu?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy