php - 如何将按钮添加到侧边栏小部件?

标签 php html wordpress

我是 WordPress 的新手,我想在 PointFinder 中的管理仪表板中添加一个自定义按钮。主题。我知道 Action Hook 的概念,并且已经使用 do_action_ref_array() 成功实现了我自己的 Action Hook ,并使用 add_action()< 从 functions.php 调用它.

方法 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>';

第二行是我的静态方法。该按钮已正确添加到侧边栏小部件。但我需要将此代码放入我的 Child-Themefunctions.php 中,以便在以后的更新过程中保留它。

方法 2(使用自定义操作 Hook 更加动态)

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

$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(),我没有找到主题开发团队实现的任何预制 Action Hook 。没什么...

解决方案?

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

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

最佳答案

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

我只是在扩展Sebastian's comment .您可以将整个 dashboard-page.php 文件(使用您自己添加的操作 Hook )复制到您的子主题文件夹。然后,您必须在父主题中搜索包含 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 代码添加到您的子主题模板之一,以在页面加载后动态更改菜单。我看了一下主题的演示,看起来边栏的列表元素有一个名为“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' );

关于php - 如何将按钮添加到侧边栏小部件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42348856/

相关文章:

php - 如何用php获取mysql数据库的行数

php - MySQL 和 PHP 多个 list 数据库插入

javascript - 在 p5 dom 上单击后如何删除提交按钮

html - 调整窗口大小时,div 不会保持不变。帮帮我?

php - 在插件激活上创建页面时遇到问题

PHP将DB的返回值放入输入框

html - 将鼠标悬停在导航链接上以显示单独的 div

javascript - 使用 radio 输入在部分形式之间切换

html - Wordpress Contact form 7 html整合问题

php - 需要修改 Wordpress 主页模板以包含编辑器字段的忽略内容