如何向侧边栏小部件添加按钮?

时间:2017-02-20 15:49:08

标签: php html wordpress action-hook

我是WordPress的新手,我想在PointFinder主题的管理信息中心添加自定义按钮。我知道动作钩子概念,并已成功实现了我自己的do_action_ref_array()动作钩子,并使用functions.phpadd_action()调用它。

方法1(将按钮定义静态放入php文件中)

我想在其中添加其他按钮的目标侧边栏小部件内置于&f; cdboard-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的{​​{1}},以便在将来的更新过程中保留此代码。

方法2(使用自定义动作挂钩更具动态性)

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

Child-Theme

之后我添加了$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

问题定义

但上述两种方法只有在我第一次更新PointFinder主题之后才会有效,因为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' ); 很可能在更新期间被覆盖。

我没有找到主题开发团队通过搜索查找dashboard-page.phpdo_action()的所有文件实现的任何预制动作挂钩。没什么...

解决方案?

因此,是否有其他方法可以从我的子主题中访问此do_action_ref_array()变量以添加额外的按钮?

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

2 个答案:

答案 0 :(得分:4)

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

我只是扩展Sebastian's comment。您可以将整个dashboard-page.php文件(使用自我添加的操作挂钩)复制到子主题文件夹。然后,您将必须在父主题中搜索包含dashboard-page.php文件的位置。希望它包含在一个父主题standard template files中。然后,您只需将该模板文件复制到您的子主题即可覆盖它。然后,您必须更改包含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代码添加到您的一个子主题模板,以在页面加载后动态更改菜单。我看了一下主题的演示,看起来侧边栏的列表元素有一个名为&#34; pf-sidebar-menu&#34;的类。您可以添加以下针对该类的代码,并在第一个列表项后插入您的按钮:

&#13;
&#13;
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>');
&#13;
<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>
&#13;
&#13;
&#13;

仅供参考,将上述代码添加到您网站的简便方法是将以下内容添加到您的子主题 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' );

答案 1 :(得分:1)

使用PHP Code Widget插件

PHP Code Widget