我是WordPress的新手,我想在PointFinder主题的管理信息中心添加自定义按钮。我知道动作钩子概念,并已成功实现了我自己的do_action_ref_array()
动作钩子,并使用functions.php
从add_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.php
和do_action()
的所有文件实现的任何预制动作挂钩。没什么...
解决方案?
因此,是否有其他方法可以从我的子主题中访问此do_action_ref_array()
变量以添加额外的按钮?
当主题开发人员没有为此特定目的构建一些预先制作的动作挂钩时,我是否完全陷入困境?
答案 0 :(得分:4)
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
正在使用每个文件的子主题版本。
另一种方法是使用javascript代码插入按钮。您可以将javascript代码添加到您的一个子主题模板,以在页面加载后动态更改菜单。我看了一下主题的演示,看起来侧边栏的列表元素有一个名为&#34; pf-sidebar-menu&#34;的类。您可以添加以下针对该类的代码,并在第一个列表项后插入您的按钮:
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;
仅供参考,将上述代码添加到您网站的简便方法是将以下内容添加到您的子主题 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
插件