首页 > 解决方案 > 覆盖不可插拔的功能 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>';
      }

    }

}

我想要实现的是添加几行代码。我尝试了以下操作:

  1. 在子主题中创建 inc 文件夹,目标文件(theme-functions.php)以及编辑它。不行,报错。
  2. 将编辑后的函数放入孩子的functions.php。同样在这里 - 不起作用。
  3. 将函数放在 IF 语句中 - 同样,不起作用。

那我该怎么办?

标签: phpwordpressfunction

解决方案


您应该做的是要求主题作者使用 使他们的功能有条件function_exists(),然后您可以在子主题中声明自己的版本。首先加载子主题,如果函数的父版本是有条件的(应该是),那么如果您的子主题中有版本,它将永远不会被执行。


推荐阅读