将菜单标题从 h2 更改为 h3(woocommerce / wordpress)

时间:2021-05-19 20:28:12

标签: php wordpress woocommerce wordpress-theming

我刚刚在 wordpress 上推出了我的商店,但遇到了一个问题: 当我在网站首页时,我所有的产品标题都在 H2 中,应该在 h3(SEO 原因),我的推荐产品也在 h2 而不是 h3(在单个产品页面和集合中,我会喜欢将它们全部更改为 h3)。我找了很长时间,问题可能出在哪里,搜索主题的所有文件,将任何标题从h2更改为h3,但没有任何帮助,我找不到它在哪里! 我也向主题创作者寻求帮助,但他们告诉我这是 woocomerce 的错,他们无能为力..

很多人在其他主题下都遇到过同样的问题,但他们没有和我一样的“function.php”。 我也跟着这个:How can I change the product <h2> in Woocommerce Storefront to <h3>? 但它对我不起作用。

有人可以帮我解决这个问题吗?

这是我的“function.php”,但我认为它不会有帮助..

/**
 * Theme functions and definitions.
 *
 * Sets up the theme and provides some helper functions
 *
 * When using a child theme (see http://codex.wordpress.org/Theme_Development
 * and http://codex.wordpress.org/Child_Themes), you can override certain
 * functions (those wrapped in a function_exists() call) by defining them first
 * in your child theme's functions.php file. The child theme's functions.php
 * file is included before the parent theme's file, so the child theme
 * functions would be used.
 *
 *
 * For more information on hooks, actions, and filters,
 * see http://codex.wordpress.org/Plugin_API
 *
 * @package OceanWP WordPress theme
 */

// Exit if accessed directly
if ( ! defined( 'ABSPATH' ) ) {
    exit;
}

// Core Constants.
define( 'OCEANWP_THEME_DIR', get_template_directory() );
define( 'OCEANWP_THEME_URI', get_template_directory_uri() );

/**
 * OceanWP theme class
 */
final class OCEANWP_Theme_Class {

    /**
     * Main Theme Class Constructor
     *
     * @since   1.0.0
     */
    public function __construct() {

        // Define theme constants.
        $this->oceanwp_constants();

        // Load required files.
        $this->oceanwp_has_setup();

        // Load framework classes.
        add_action( 'after_setup_theme', array( 'OCEANWP_Theme_Class', 'classes' ), 4 );

        // Setup theme => add_theme_support, register_nav_menus, load_theme_textdomain, etc.
        add_action( 'after_setup_theme', array( 'OCEANWP_Theme_Class', 'theme_setup' ), 10 );

        // Setup theme => Generate the custom CSS file.
        add_action( 'admin_bar_init', array( 'OCEANWP_Theme_Class', 'save_customizer_css_in_file' ), 9999 );

        // register sidebar widget areas.
        add_action( 'widgets_init', array( 'OCEANWP_Theme_Class', 'register_sidebars' ) );

        // Registers theme_mod strings into Polylang.
        if ( class_exists( 'Polylang' ) ) {
            add_action( 'after_setup_theme', array( 'OCEANWP_Theme_Class', 'polylang_register_string' ) );
        }

        /** Admin only actions */
        if ( is_admin() ) {

            // Load scripts in the WP admin.
            add_action( 'admin_enqueue_scripts', array( 'OCEANWP_Theme_Class', 'admin_scripts' ) );

            // Outputs custom CSS for the admin.
            add_action( 'admin_head', array( 'OCEANWP_Theme_Class', 'admin_inline_css' ) );

            /** Non Admin actions */
        } else {

            // Load theme CSS.
            add_action( 'wp_enqueue_scripts', array( 'OCEANWP_Theme_Class', 'theme_css' ) );

            // Load his file in last.
            add_action( 'wp_enqueue_scripts', array( 'OCEANWP_Theme_Class', 'custom_style_css' ), 9999 );

            // Remove Customizer CSS script from Front-end.
            add_action( 'init', array( 'OCEANWP_Theme_Class', 'remove_customizer_custom_css' ) );

            // Load theme js.
            add_action( 'wp_enqueue_scripts', array( 'OCEANWP_Theme_Class', 'theme_js' ) );

            // Add a pingback url auto-discovery header for singularly identifiable articles.
            add_action( 'wp_head', array( 'OCEANWP_Theme_Class', 'pingback_header' ), 1 );

            // Add meta viewport tag to header.
            add_action( 'wp_head', array( 'OCEANWP_Theme_Class', 'meta_viewport' ), 1 );

            // Add an X-UA-Compatible header.
            add_filter( 'wp_headers', array( 'OCEANWP_Theme_Class', 'x_ua_compatible_headers' ) );

            // Loads html5 shiv script.
            add_action( 'wp_head', array( 'OCEANWP_Theme_Class', 'html5_shiv' ) );

            // Outputs custom CSS to the head.
            add_action( 'wp_head', array( 'OCEANWP_Theme_Class', 'custom_css' ), 9999 );

            // Minify the WP custom CSS because WordPress doesn't do it by default.
            add_filter( 'wp_get_custom_css', array( 'OCEANWP_Theme_Class', 'minify_custom_css' ) );

            // Alter the search posts per page.
            add_action( 'pre_get_posts', array( 'OCEANWP_Theme_Class', 'search_posts_per_page' ) );

            // Alter WP categories widget to display count inside a span.
            add_filter( 'wp_list_categories', array( 'OCEANWP_Theme_Class', 'wp_list_categories_args' ) );

            // Add a responsive wrapper to the WordPress oembed output.
            add_filter( 'embed_oembed_html', array( 'OCEANWP_Theme_Class', 'add_responsive_wrap_to_oembeds' ), 99, 4 );

            // Adds classes the post class.
            add_filter( 'post_class', array( 'OCEANWP_Theme_Class', 'post_class' ) );

            // Add schema markup to the authors post link.
            add_filter( 'the_author_posts_link', array( 'OCEANWP_Theme_Class', 'the_author_posts_link' ) );

            // Add support for Elementor Pro locations.
            add_action( 'elementor/theme/register_locations', array( 'OCEANWP_Theme_Class', 'register_elementor_locations' ) );

            // Remove the default lightbox script for the beaver builder plugin.
            add_filter( 'fl_builder_override_lightbox', array( 'OCEANWP_Theme_Class', 'remove_bb_lightbox' ) );

        }

    }

    /**
     * Define Constants
     *
     * @since   1.0.0
     */
    public static function oceanwp_constants() {

        $version = self::theme_version();

        // Theme version.
        define( 'OCEANWP_THEME_VERSION', $version );

        // Javascript and CSS Paths.
        define( 'OCEANWP_JS_DIR_URI', OCEANWP_THEME_URI . '/assets/js/' );
        define( 'OCEANWP_CSS_DIR_URI', OCEANWP_THEME_URI . '/assets/css/' );

        // Include Paths.
        define( 'OCEANWP_INC_DIR', OCEANWP_THEME_DIR . '/inc/' );
        define( 'OCEANWP_INC_DIR_URI', OCEANWP_THEME_URI . '/inc/' );

        // Check if plugins are active.
        define( 'OCEAN_EXTRA_ACTIVE', class_exists( 'Ocean_Extra' ) );
        define( 'OCEANWP_ELEMENTOR_ACTIVE', class_exists( 'Elementor\Plugin' ) );
        define( 'OCEANWP_BEAVER_BUILDER_ACTIVE', class_exists( 'FLBuilder' ) );
        define( 'OCEANWP_WOOCOMMERCE_ACTIVE', class_exists( 'WooCommerce' ) );
        define( 'OCEANWP_EDD_ACTIVE', class_exists( 'Easy_Digital_Downloads' ) );
        define( 'OCEANWP_LIFTERLMS_ACTIVE', class_exists( 'LifterLMS' ) );
        define( 'OCEANWP_ALNP_ACTIVE', class_exists( 'Auto_Load_Next_Post' ) );
        define( 'OCEANWP_LEARNDASH_ACTIVE', class_exists( 'SFWD_LMS' ) );
    }

    /**
     * Load all core theme function files
     *
     * @since 1.0.0oceanwp_has_setup
     */
    public static function oceanwp_has_setup() {

        $dir = OCEANWP_INC_DIR;

        require_once $dir . 'helpers.php';
        require_once $dir . 'header-content.php';
        require_once $dir . 'oceanwp-strings.php';
        require_once $dir . 'oceanwp-theme-icons.php';
        require_once $dir . 'customizer/controls/typography/webfonts.php';
        require_once $dir . 'walker/init.php';
        require_once $dir . 'walker/menu-walker.php';
        require_once $dir . 'third/class-gutenberg.php';
        require_once $dir . 'third/class-elementor.php';
        require_once $dir . 'third/class-beaver-themer.php';
        require_once $dir . 'third/class-bbpress.php';
        require_once $dir . 'third/class-buddypress.php';
        require_once $dir . 'third/class-lifterlms.php';
        require_once $dir . 'third/class-learndash.php';
        require_once $dir . 'third/class-sensei.php';
        require_once $dir . 'third/class-social-login.php';
        require_once $dir . 'third/class-amp.php';
        require_once $dir . 'third/class-pwa.php';

        // WooCommerce.
        if ( OCEANWP_WOOCOMMERCE_ACTIVE ) {
            require_once $dir . 'woocommerce/woocommerce-config.php';
        }

        // Easy Digital Downloads.
        if ( OCEANWP_EDD_ACTIVE ) {
            require_once $dir . 'edd/edd-config.php';
        }

    }

    /**
     * Returns current theme version
     *
     * @since   1.0.0
     */
    public static function theme_version() {

        // Get theme data.
        $theme = wp_get_theme();

        // Return theme version.
        return $theme->get( 'Version' );

    }

    /**
     * Compare WordPress version
     *
     * @access public
     * @since 1.8.3
     * @param  string $version - A WordPress version to compare against current version.
     * @return boolean
     */
    public static function is_wp_version( $version = '5.4' ) {

        global $wp_version;

        // WordPress version.
        return version_compare( strtolower( $wp_version ), strtolower( $version ), '>=' );

    }


    /**
     * Check for AMP endpoint
     *
     * @return bool
     * @since 1.8.7
     */
    public static function oceanwp_is_amp() {
        return function_exists( 'is_amp_endpoint' ) && is_amp_endpoint();
    }

    /**
     * Load theme classes
     *
     * @since   1.0.0
     */
    public static function classes() {

        // Admin only classes.
        if ( is_admin() ) {

            // Recommend plugins.
            require_once OCEANWP_INC_DIR . 'plugins/class-tgm-plugin-activation.php';
            require_once OCEANWP_INC_DIR . 'plugins/tgm-plugin-activation.php';

            // Front-end classes.
        } else {

            // Breadcrumbs class.
            require_once OCEANWP_INC_DIR . 'breadcrumbs.php';

        }

        // Customizer class.
        require_once OCEANWP_INC_DIR . 'customizer/customizer.php';

    }

    /**
     * Theme Setup
     *
     * @since   1.0.0
     */
    public static function theme_setup() {

        // Load text domain.
        load_theme_textdomain( 'oceanwp', OCEANWP_THEME_DIR . '/languages' );

        // Get globals.
        global $content_width;

        // Set content width based on theme's default design.
        if ( ! isset( $content_width ) ) {
            $content_width = 1200;
        }

        // Register navigation menus.
        register_nav_menus(
            array(
                'topbar_menu' => esc_html__( 'Top Bar', 'oceanwp' ),
                'main_menu'   => esc_html__( 'Main', 'oceanwp' ),
                'footer_menu' => esc_html__( 'Footer', 'oceanwp' ),
                'mobile_menu' => esc_html__( 'Mobile (optional)', 'oceanwp' ),
            )
        );

        // Enable support for Post Formats.
        add_theme_support( 'post-formats', array( 'video', 'gallery', 'audio', 'quote', 'link' ) );

        // Enable support for <title> tag.
        add_theme_support( 'title-tag' );

        // Add default posts and comments RSS feed links to head.
        add_theme_support( 'automatic-feed-links' );

        // Enable support for Post Thumbnails on posts and pages.
        add_theme_support( 'post-thumbnails' );

        /**
         * Enable support for header image
         */
        add_theme_support(
            'custom-header',
            apply_filters(
                'ocean_custom_header_args',
                array(
                    'width'       => 2000,
                    'height'      => 1200,
                    'flex-height' => true,
                    'video'       => true,
                )
            )
        );

        /**
         * Enable support for site logo
         */
        add_theme_support(
            'custom-logo',
            apply_filters(
                'ocean_custom_logo_args',
                array(
                    'height'      => 45,
                    'width'       => 164,
                    'flex-height' => true,
                    'flex-width'  => true,
                )
            )
        );

        /*
         * Switch default core markup for search form, comment form, comments, galleries, captions and widgets
         * to output valid HTML5.
         */
        add_theme_support(
            'html5',
            array(
                'comment-form',
                'comment-list',
                'gallery',
                'caption',
                'widgets',
            )
        );

        // Declare WooCommerce support.
        add_theme_support( 'woocommerce' );
        add_theme_support( 'wc-product-gallery-zoom' );
        add_theme_support( 'wc-product-gallery-lightbox' );
        add_theme_support( 'wc-product-gallery-slider' );

        // Add editor style.
        add_editor_style( 'assets/css/editor-style.min.css' );

        // Declare support for selective refreshing of widgets.
        add_theme_support( 'customize-selective-refresh-widgets' );

    }

    /**
     * Adds the meta tag to the site header
     *
     * @since 1.1.0
     */
    public static function pingback_header() {

        if ( is_singular() && pings_open() ) {
            printf( '<link rel="pingback" href="%s">' . "\n", esc_url( get_bloginfo( 'pingback_url' ) ) );
        }

    }

    /**
     * Adds the meta tag to the site header
     *
     * @since 1.0.0
     */
    public static function meta_viewport() {

        // Meta viewport.
        $viewport = '<meta name="viewport" content="width=device-width, initial-scale=1">';

        // Apply filters for child theme tweaking.
        echo apply_filters( 'ocean_meta_viewport', $viewport ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped

    }

    /**
     * Load scripts in the WP admin
     *
     * @since 1.0.0
     */
    public static function admin_scripts() {
        global $pagenow;
        if ( 'nav-menus.php' === $pagenow ) {
            wp_enqueue_style( 'oceanwp-menus', OCEANWP_INC_DIR_URI . 'walker/assets/menus.css', false, OCEANWP_THEME_VERSION );
        }
    }

    /**
     * Load front-end scripts
     *
     * @since   1.0.0
     */
    public static function theme_css() {

        // Define dir.
        $dir           = OCEANWP_CSS_DIR_URI;
        $theme_version = OCEANWP_THEME_VERSION;

        // Remove font awesome style from plugins.
        wp_deregister_style( 'font-awesome' );
        wp_deregister_style( 'fontawesome' );

        // Load font awesome style.
        wp_enqueue_style( 'font-awesome', OCEANWP_THEME_URI . '/assets/fonts/fontawesome/css/all.min.css', false, '5.15.1' );

        // Register simple line icons style.
        wp_enqueue_style( 'simple-line-icons', $dir . 'third/simple-line-icons.min.css', false, '2.4.0' );

        // Register the lightbox style.
        wp_enqueue_style( 'magnific-popup', $dir . 'third/magnific-popup.min.css', false, '1.0.0' );

        // Register the slick style.
        wp_enqueue_style( 'slick', $dir . 'third/slick.min.css', false, '1.6.0' );

        // Main Style.css File.
        wp_enqueue_style( 'oceanwp-style', $dir . 'style.min.css', false, $theme_version );

        // Register hamburgers buttons to easily use them.
        wp_register_style( 'oceanwp-hamburgers', $dir . 'third/hamburgers/hamburgers.min.css', false, $theme_version );

        // Register hamburgers buttons styles.
        $hamburgers = oceanwp_hamburgers_styles();
        foreach ( $hamburgers as $class => $name ) {
            wp_register_style( 'oceanwp-' . $class . '', $dir . 'third/hamburgers/types/' . $class . '.css', false, $theme_version );
        }

        // Get mobile menu icon style.
        $mobileMenu = get_theme_mod( 'ocean_mobile_menu_open_hamburger', 'default' );

        // Enqueue mobile menu icon style.
        if ( ! empty( $mobileMenu ) && 'default' !== $mobileMenu ) {
            wp_enqueue_style( 'oceanwp-hamburgers' );
            wp_enqueue_style( 'oceanwp-' . $mobileMenu . '' );
        }

        // If Vertical header style.
        if ( 'vertical' === oceanwp_header_style() ) {
            wp_enqueue_style( 'oceanwp-hamburgers' );
            wp_enqueue_style( 'oceanwp-spin' );
        }

    }

    /**
     * Returns all js needed for the front-end
     *
     * @since 1.0.0
     */
    public static function theme_js() {

        if ( self::oceanwp_is_amp() ) {
            return;
        }

        // Get js directory uri.
        $dir = OCEANWP_JS_DIR_URI;

        // Get current theme version.
        $theme_version = OCEANWP_THEME_VERSION;

        // Get localized array.
        $localize_array = self::localize_array();

        // Comment reply.
        if ( is_singular() && comments_open() && get_option( 'thread_comments' ) ) {
            wp_enqueue_script( 'comment-reply' );
        }

        // Add images loaded.
        wp_enqueue_script( 'imagesloaded' );

        // Register nicescroll script to use it in some extensions.
        wp_register_script( 'nicescroll', $dir . 'third/nicescroll.min.js', array( 'jquery' ), $theme_version, true );

        // Enqueue nicescroll script if vertical header style.
        if ( 'vertical' === oceanwp_header_style() ) {
            wp_enqueue_script( 'nicescroll' );
        }

        // Register Infinite Scroll script.
        wp_register_script( 'infinitescroll', $dir . 'third/infinitescroll.min.js', array( 'jquery' ), $theme_version, true );

        // WooCommerce scripts.
        if ( OCEANWP_WOOCOMMERCE_ACTIVE
            && 'yes' !== get_theme_mod( 'ocean_woo_remove_custom_features', 'no' ) ) {
            wp_enqueue_script( 'oceanwp-woocommerce', $dir . 'third/woo/woo-scripts.min.js', array( 'jquery' ), $theme_version, true );
        }

        // Load the lightbox scripts.
        wp_enqueue_script( 'magnific-popup', $dir . 'third/magnific-popup.min.js', array( 'jquery' ), $theme_version, true );
        wp_enqueue_script( 'oceanwp-lightbox', $dir . 'third/lightbox.min.js', array( 'jquery' ), $theme_version, true );

        // Load minified js.
        wp_enqueue_script( 'oceanwp-main', $dir . 'main.min.js', array( 'jquery' ), $theme_version, true );

        // Localize array.
        wp_localize_script( 'oceanwp-main', 'oceanwpLocalize', $localize_array );

    }

    /**
     * Functions.js localize array
     *
     * @since 1.0.0
     */
    public static function localize_array() {

        // Create array.
        $sidr_side   = get_theme_mod( 'ocean_mobile_menu_sidr_direction', 'left' );
        $sidr_side   = $sidr_side ? $sidr_side : 'left';
        $sidr_target = get_theme_mod( 'ocean_mobile_menu_sidr_dropdown_target', 'link' );
        $sidr_target = $sidr_target ? $sidr_target : 'link';
        $vh_target   = get_theme_mod( 'ocean_vertical_header_dropdown_target', 'link' );
        $vh_target   = $vh_target ? $vh_target : 'link';
        $array       = array(
            'isRTL'                => is_rtl(),
            'menuSearchStyle'      => oceanwp_menu_search_style(),
            'sidrSource'           => oceanwp_sidr_menu_source(),
            'sidrDisplace'         => get_theme_mod( 'ocean_mobile_menu_sidr_displace', true ) ? true : false,
            'sidrSide'             => $sidr_side,
            'sidrDropdownTarget'   => $sidr_target,
            'verticalHeaderTarget' => $vh_target,
            'customSelects'        => '.woocommerce-ordering .orderby, #dropdown_product_cat, .widget_categories select, .widget_archive select, .single-product .variations_form .variations select',
        );

        // WooCart.
        if ( OCEANWP_WOOCOMMERCE_ACTIVE ) {
            $array['wooCartStyle'] = oceanwp_menu_cart_style();
        }

        // Apply filters and return array.
        return apply_filters( 'ocean_localize_array', $array );
    }

    /**
     * Add headers for IE to override IE's Compatibility View Settings
     *
     * @param obj $headers   header settings.
     * @since 1.0.0
     */
    public static function x_ua_compatible_headers( $headers ) {
        $headers['X-UA-Compatible'] = 'IE=edge';
        return $headers;
    }

    /**
     * Load HTML5 dependencies for IE8
     *
     * @since 1.0.0
     */
    public static function html5_shiv() {
        wp_register_script( 'html5shiv', OCEANWP_JS_DIR_URI . 'third/html5.min.js', array(), OCEANWP_THEME_VERSION, false );
        wp_enqueue_script( 'html5shiv' );
        wp_script_add_data( 'html5shiv', 'conditional', 'lt IE 9' );
    }

    /**
     * Registers sidebars
     *
     * @since   1.0.0
     */
    public static function register_sidebars() {

        $heading = get_theme_mod( 'ocean_sidebar_widget_heading_tag', 'h4' );
        $heading = apply_filters( 'ocean_sidebar_widget_heading_tag', $heading );

        $foo_heading = get_theme_mod( 'ocean_footer_widget_heading_tag', 'h4' );
        $foo_heading = apply_filters( 'ocean_footer_widget_heading_tag', $foo_heading );

        // Default Sidebar.
        register_sidebar(
            array(
                'name'          => esc_html__( 'Default Sidebar', 'oceanwp' ),
                'id'            => 'sidebar',
                'description'   => esc_html__( 'Widgets in this area will be displayed in the left or right sidebar area if you choose the Left or Right Sidebar layout.', 'oceanwp' ),
                'before_widget' => '<div id="%1$s" class="sidebar-box %2$s clr">',
                'after_widget'  => '</div>',
                'before_title'  => '<' . $heading . ' class="widget-title">',
                'after_title'   => '</' . $heading . '>',
            )
        );

        // Left Sidebar.
        register_sidebar(
            array(
                'name'          => esc_html__( 'Left Sidebar', 'oceanwp' ),
                'id'            => 'sidebar-2',
                'description'   => esc_html__( 'Widgets in this area are used in the left sidebar region if you use the Both Sidebars layout.', 'oceanwp' ),
                'before_widget' => '<div id="%1$s" class="sidebar-box %2$s clr">',
                'after_widget'  => '</div>',
                'before_title'  => '<' . $heading . ' class="widget-title">',
                'after_title'   => '</' . $heading . '>',
            )
        );

        // Search Results Sidebar.
        if ( get_theme_mod( 'ocean_search_custom_sidebar', true ) ) {
            register_sidebar(
                array(
                    'name'          => esc_html__( 'Search Results Sidebar', 'oceanwp' ),
                    'id'            => 'search_sidebar',
                    'description'   => esc_html__( 'Widgets in this area are used in the search result page.', 'oceanwp' ),
                    'before_widget' => '<div id="%1$s" class="sidebar-box %2$s clr">',
                    'after_widget'  => '</div>',
                    'before_title'  => '<' . $heading . ' class="widget-title">',
                    'after_title'   => '</' . $heading . '>',
                )
            );
        }

        // Footer 1.
        register_sidebar(
            array(
                'name'          => esc_html__( 'Footer 1', 'oceanwp' ),
                'id'            => 'footer-one',
                'description'   => esc_html__( 'Widgets in this area are used in the first footer region.', 'oceanwp' ),
                'before_widget' => '<div id="%1$s" class="footer-widget %2$s clr">',
                'after_widget'  => '</div>',
                'before_title'  => '<' . $foo_heading . ' class="widget-title">',
                'after_title'   => '</' . $foo_heading . '>',
            )
        );

        // Footer 2.
        register_sidebar(
            array(
                'name'          => esc_html__( 'Footer 2', 'oceanwp' ),
                'id'            => 'footer-two',
                'description'   => esc_html__( 'Widgets in this area are used in the second footer region.', 'oceanwp' ),
                'before_widget' => '<div id="%1$s" class="footer-widget %2$s clr">',
                'after_widget'  => '</div>',
                'before_title'  => '<' . $foo_heading . ' class="widget-title">',
                'after_title'   => '</' . $foo_heading . '>',
            )
        );

        // Footer 3.
        register_sidebar(
            array(
                'name'          => esc_html__( 'Footer 3', 'oceanwp' ),
                'id'            => 'footer-three',
                'description'   => esc_html__( 'Widgets in this area are used in the third footer region.', 'oceanwp' ),
                'before_widget' => '<div id="%1$s" class="footer-widget %2$s clr">',
                'after_widget'  => '</div>',
                'before_title'  => '<' . $foo_heading . ' class="widget-title">',
                'after_title'   => '</' . $foo_heading . '>',
            )
        );

        // Footer 4.
        register_sidebar(
            array(
                'name'          => esc_html__( 'Footer 4', 'oceanwp' ),
                'id'            => 'footer-four',
                'description'   => esc_html__( 'Widgets in this area are used in the fourth footer region.', 'oceanwp' ),
                'before_widget' => '<div id="%1$s" class="footer-widget %2$s clr">',
                'after_widget'  => '</div>',
                'before_title'  => '<' . $foo_heading . ' class="widget-title">',
                'after_title'   => '</' . $foo_heading . '>',
            )
        );

    }

    /**
     * Registers theme_mod strings into Polylang.
     *
     * @since 1.1.4
     */
    public static function polylang_register_string() {

        if ( function_exists( 'pll_register_string' ) && $strings = oceanwp_register_tm_strings() ) {
            foreach ( $strings as $string => $default ) {
                pll_register_string( $string, get_theme_mod( $string, $default ), 'Theme Mod', true );
            }
        }

    }

    /**
     * All theme functions hook into the oceanwp_head_css filter for this function.
     *
     * @param obj $output output value.
     * @since 1.0.0
     */
    public static function custom_css( $output = null ) {

        // Add filter for adding custom css via other functions.
        $output = apply_filters( 'ocean_head_css', $output );

        // If Custom File is selected.
        if ( 'file' === get_theme_mod( 'ocean_customzer_styling', 'head' ) ) {

            global $wp_customize;
            $upload_dir = wp_upload_dir();

            // Render CSS in the head.
            if ( isset( $wp_customize ) || ! file_exists( $upload_dir['basedir'] . '/oceanwp/custom-style.css' ) ) {

                // Minify and output CSS in the wp_head.
                if ( ! empty( $output ) ) {
                    echo "<!-- OceanWP CSS -->\n<style type=\"text/css\">\n" . wp_strip_all_tags( oceanwp_minify_css( $output ) ) . "\n</style>"; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
                }
            }
        } else {

            // Minify and output CSS in the wp_head.
            if ( ! empty( $output ) ) {
                echo "<!-- OceanWP CSS -->\n<style type=\"text/css\">\n" . wp_strip_all_tags( oceanwp_minify_css( $output ) ) . "\n</style>"; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
            }
        }

    }

    /**
     * Minify the WP custom CSS because WordPress doesn't do it by default.
     *
     * @param obj $css minify css.
     * @since 1.1.9
     */
    public static function minify_custom_css( $css ) {

        return oceanwp_minify_css( $css );

    }

    /**
     * Save Customizer CSS in a file
     *
     * @param obj $output output value.
     * @since 1.4.12
     */
    public static function save_customizer_css_in_file( $output = null ) {

        // If Custom File is not selected.
        if ( 'file' !== get_theme_mod( 'ocean_customzer_styling', 'head' ) ) {
            return;
        }

        // Get all the customier css.
        $output = apply_filters( 'ocean_head_css', $output );

        // Get Custom Panel CSS.
        $output_custom_css = wp_get_custom_css();

        // Minified the Custom CSS.
        $output .= oceanwp_minify_css( $output_custom_css );

        // We will probably need to load this file.
        require_once ABSPATH . 'wp-admin' . DIRECTORY_SEPARATOR . 'includes' . DIRECTORY_SEPARATOR . 'file.php';

        global $wp_filesystem;
        $upload_dir = wp_upload_dir(); // Grab uploads folder array.
        $dir        = trailingslashit( $upload_dir['basedir'] ) . 'oceanwp' . DIRECTORY_SEPARATOR; // Set storage directory path.

        WP_Filesystem(); // Initial WP file system.
        $wp_filesystem->mkdir( $dir ); // Make a new folder 'oceanwp' for storing our file if not created already.
        $wp_filesystem->put_contents( $dir . 'custom-style.css', $output, 0644 ); // Store in the file.

    }

    /**
     * Include Custom CSS file if present.
     *
     * @param obj $output output value.
     * @since 1.4.12
     */
    public static function custom_style_css( $output = null ) {

        // If Custom File is not selected.
        if ( 'file' !== get_theme_mod( 'ocean_customzer_styling', 'head' ) ) {
            return;
        }

        global $wp_customize;
        $upload_dir = wp_upload_dir();

        // Get all the customier css.
        $output = apply_filters( 'ocean_head_css', $output );

        // Get Custom Panel CSS.
        $output_custom_css = wp_get_custom_css();

        // Minified the Custom CSS.
        $output .= oceanwp_minify_css( $output_custom_css );

        // Render CSS from the custom file.
        if ( ! isset( $wp_customize ) && file_exists( $upload_dir['basedir'] . '/oceanwp/custom-style.css' ) && ! empty( $output ) ) {
            wp_enqueue_style( 'oceanwp-custom', trailingslashit( $upload_dir['baseurl'] ) . 'oceanwp/custom-style.css', false, false );
        }
    }

    /**
     * Remove Customizer style script from front-end
     *
     * @since 1.4.12
     */
    public static function remove_customizer_custom_css() {

        // If Custom File is not selected.
        if ( 'file' !== get_theme_mod( 'ocean_customzer_styling', 'head' ) ) {
            return;
        }

        global $wp_customize;

        // Disable Custom CSS in the frontend head.
        remove_action( 'wp_head', 'wp_custom_css_cb', 11 );
        remove_action( 'wp_head', 'wp_custom_css_cb', 101 );

        // If custom CSS file exists and NOT in customizer screen.
        if ( isset( $wp_customize ) ) {
            add_action( 'wp_footer', 'wp_custom_css_cb', 9999 );
        }
    }

    /**
     * Adds inline CSS for the admin
     *
     * @since 1.0.0
     */
    public static function admin_inline_css() {
        echo '<style>div#setting-error-tgmpa{display:block;}</style>';
    }

    /**
     * Alter the search posts per page
     *
     * @param obj $query query.
     * @since 1.3.7
     */
    public static function search_posts_per_page( $query ) {
        $posts_per_page = get_theme_mod( 'ocean_search_post_per_page', '8' );
        $posts_per_page = $posts_per_page ? $posts_per_page : '8';

        if ( $query->is_main_query() && is_search() ) {
            $query->set( 'posts_per_page', $posts_per_page );
        }
    }

    /**
     * Alter wp list categories arguments.
     * Adds a span around the counter for easier styling.
     *
     * @param obj $links link.
     * @since 1.0.0
     */
    public static function wp_list_categories_args( $links ) {
        $links = str_replace( '</a> (', '</a> <span class="cat-count-span">(', $links );
        $links = str_replace( ' )', ' )</span>', $links );
        return $links;
    }

    /**
     * Alters the default oembed output.
     * Adds special classes for responsive oembeds via CSS.
     *
     * @param obj $cache     cache.
     * @param url $url       url.
     * @param obj $attr      attributes.
     * @param obj $post_ID   post id.
     * @since 1.0.0
     */
    public static function add_responsive_wrap_to_oembeds( $cache, $url, $attr, $post_ID ) {...```

2 个答案:

答案 0 :(得分:1)

这是 Woocommerce 模板问题。这不是主题问题。

您要替换的操作是:woocommerce_shop_loop_item_title,它位于:plugins/woocommerce/templates/content-product.php

这是在操作中调用的函数:woocommerce_template_loop_product_title(这是输出的来源。您可以在 wc-template-functions.php 中找到原始标记。

您需要做些什么来替换它,因为没有针对实际 HTML 标签(只是它们之间的内容)的过滤器。在您的 functions.php(在您的 child theme)中,您可以添加:

// First we remove the original output that is hooked.
remove_action( 'woocommerce_shop_loop_item_title', 'woocommerce_template_loop_product_title', 10 );

// Now we will add your new output to the hook
add_action( 'woocommerce_shop_loop_item_title', 'wp67610449_woocommerce_template_loop_product_title', 10 );

/* Now we have your function. You can name this whatever you want, but it needs to match the name in the add_action */

function wp67610449_woocommerce_template_loop_product_title() {
    //We'll just copy this from the existing function to keep all the functionality the same.
    echo '<h3 class="' . esc_attr( apply_filters( 'woocommerce_product_loop_title_classes', 'woocommerce-loop-product__title' ) ) . '">' . get_the_title() . '</h3>'; 
}

如果您将此添加到主主题的 functions.php,如果您更新主题,它将被覆盖。您应该创建一个子主题,它可以像空的styles.css(顶部带有必需的注释)和functions.php 一样稀疏,并使用此代码。

答案 1 :(得分:0)

我不认为 functions.php 文件与它有任何关系 - 通常像这样的 HTML 结构是在主题文件夹中的模板 php 文件中创建的 - 无论是在该文件夹的顶层还是作为相应子文件夹中的“模板部件”。您必须编辑那些(或者实际上是您所引用的页面使用的那些),将所有 <h3> 标记更改为 <h2>(也是结束标记)。

然而,由于任何非自制主题会不时更新,这些更改将在可用时被更新的文件覆盖,因此有必要创建一个子主题,其中仅包含您要更改的模板(另见https://developer.wordpress.org/themes/advanced-topics/child-themes/)。再说一次,更新的主题可能包含必要的模板更新,因此您必须始终检查该特定模板文件中更新了哪些详细信息,将其集成到您的子主题模板或编辑更新的原始主题并在您的孩子中使用它们主题。

P.S.:我认为你的问题标题有点误导:在问题文本中,你问的是产品页面中的某些标题标签,而不是菜单的某些部分,不是吗?