【发布时间】:2017-07-09 23:39:33
【问题描述】:
我是 WordPress 的新手,我想在 PointFinder 主题的管理仪表板中添加一个自定义按钮。我知道动作钩子的概念,并且已经使用do_action_ref_array() 成功实现了我自己的动作钩子,并从functions.php 和add_action() 调用它。
方法一(将按钮定义静态放入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>';
第二行是我的静态方法。该按钮已正确添加到侧边栏小部件。但是我需要将此代码放到我的Child-Theme 的functions.php 中,以便在以后的更新过程中保留它。
方法 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>';
之后我在我的子主题的function.php 中添加了一个add_action() 调用,并在那里添加了按钮,它也可以正常工作:
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 变量以添加额外的按钮?
当主题开发人员没有为此特定目的内置一些预制动作挂钩时,我是否完全陷入困境?
【问题讨论】:
-
为什么不直接从子主题编辑dashboard-page.php 文件?
-
我不会在前端和后端查看文件,如果您安装了 Simply Show Hooks,您可以在您的站点和管理员中查看所有挂钩和过滤器。然后,如果找不到特定区域,则可以在附近找到一个,并使用优先级将其粘贴在另一个区域的上方或下方。
-
为什么要在主题或子主题中添加按钮。制作插件
-
感谢您的众多反馈。我会尽力理解你的所有想法。这需要一些时间,但我会回复大家。
-
@SebastianKaczmarek:如果我将
dashboard-page.php及其文件夹结构复制到我的子主题,如果发布者去更改/更新该文件中的任何内容,它将不会被更新,对吗?跨度>
标签: php html wordpress action-hook