php - 覆盖不可插拔的功能 wordpress 子主题
问题描述
我在尝试编辑当前主题(称为 Carrie)时遇到了问题。我正在使用儿童主题。所以我想要实现的是编辑/提升主题功能之一,称为“ carrie_header_post_show ”。该函数位于名为 theme-functions.php 的父文件(位于 inc 目录中)中。代码如下所示:
function carrie_header_post_show() {
$carrie_theme_options = carrie_get_theme_options();
$header_post_html = '';
if(isset($carrie_theme_options['header_post_id']) && $carrie_theme_options['header_post_id']<>'') {
$header_post_id = $carrie_theme_options['header_post_id'];
$header_post = get_post($header_post_id);
if($header_post) {
if(has_post_thumbnail( $header_post_id )) {
$header_post_thumb_id = get_post_thumbnail_id($header_post_id);
$header_post_image_url = wp_get_attachment_image_src( $header_post_thumb_id, 'carrie-blog-thumb-widget');
$header_post_image = '<a href="'.get_permalink($header_post_id).'"><img src="'.esc_url($header_post_image_url[0]).'" alt="'.esc_attr($header_post->post_title).'"/></a>';
} else {
$header_post_image = '';
}
$header_post_categories_list = get_the_category_list(', ', 0, $header_post_id);
$header_post_html .= '<div class="header-post-image hover-effect-img">'.wp_kses_post($header_post_image).'</div>';
$header_post_html .= '<div class="header-post-details">';
$header_post_html .= '<div class="header-post-category">';
$title = wp_kses_post($header_post_categories_list);
$header_post_html .= '</div>';
$header_post_html .= '<div class="header-post-title"><a href="'.get_permalink($header_post_id).'">'.wp_kses_post($header_post->post_title).'</a></div>';
$header_post_html .= '</div>';
echo '<div class="header-post-content clearfix">'.wp_kses_post($header_post_html).'</div>';
}
}
}
我想要实现的是添加几行代码。我尝试了以下操作:
- 在子主题中创建 inc 文件夹,目标文件(theme-functions.php)以及编辑它。不行,报错。
- 将编辑后的函数放入孩子的functions.php。同样在这里 - 不起作用。
- 将函数放在 IF 语句中 - 同样,不起作用。
那我该怎么办?
解决方案
您应该做的是要求主题作者使用 使他们的功能有条件function_exists()
,然后您可以在子主题中声明自己的版本。首先加载子主题,如果函数的父版本是有条件的(应该是),那么如果您的子主题中有版本,它将永远不会被执行。
推荐阅读
- xpages - XPage SSJS validateExpression 缓存以前的值
- spring - 为什么部署后字体真棒图标不显示?
- google-chrome-extension - Chrome 扩展 - 需要在内容脚本中添加 chrome.browser 操作
- angularjs - 尝试从 AngularJS 中的 VSTS 存储库获取项目级数据时出错?
- javascript - 如何使用 jQuery UI 在模式对话框中重置选择菜单
- node.js - 安装 Angular cli 时遇到问题
- symfony - 学说迁移在项目中间开始
- javascript - 如何在带有 JS 的复选框之后显示文本而不手动修改 HTML?
- javascript - 从javascript字符串插值向结果字符串添加一对反引号的优雅方法?
- javascript - Js Promise for ajax 的成功和错误