5

我对 WordPress 很陌生,我想在PointFinder主题的管理仪表板中添加一个自定义按钮。我知道动作钩子的概念,并且已经成功实现了我自己的动作钩子 with并从with中do_action_ref_array()调用它。functions.phpadd_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(使用自定义动作挂钩更加动态)

我还尝试添加自己的动作挂钩,而不是静态添加按钮(将第二行替换为动作挂钩定义:

$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变量以添加额外的按钮?

当主题开发人员没有为此特定目的内置一些预先制作的动作挂钩时,我是否完全陷入困境?

4

2 回答 2

4

选项 1:复制dashboard-page.php到您的子主题

我只是在扩展Sebastian 的评论。您可以将整个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>

仅供参考,将上述代码添加到您的站点的一种简单方法是将以下代码添加到您的子主题的functions.php 文件中。这将使用上述代码在您网站的页脚处创建一个脚本标记。您可能必须添加额外的检查以针对特定页面或页面。

<?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' );
于 2017-02-25T00:16:25.567 回答
1

使用PHP Code Widget插件

PHP 代码小部件

于 2017-02-24T19:52:36.373 回答