标签: wordpress调用

  • 给wordpress网站的图片加alt标签

    给wordpress网站的图片加alt标签的几种方法,在实际应用中可以根据自己的需求,调用最适合自己的。

    直接输出文章标题(和原来一样,仅作占位,无特殊处理)

    alt="<?php echo esc_attr( get_the_title() ); ?>"

    取“图片本身的替代文本”(上传媒体时填的那个“替代文本”字段)

    alt="<?php
    $thumb_id = get_post_thumbnail_id( $post->ID );
    echo $thumb_id ? esc_attr( get_post_meta( $thumb_id, '_wp_attachment_image_alt', true ) ) : esc_attr( get_the_title() );
    ?>"

    取“图片标题”(上传媒体时填的那个“标题”字段)

    alt="<?php
    $thumb_id = get_post_thumbnail_id( $post->ID );
    echo $thumb_id ? esc_attr( get_the_title( $thumb_id ) ) : esc_attr( get_the_title() );
    ?>"

    取“图片说明(caption)”

    alt="<?php
    $thumb_id = get_post_thumbnail_id( $post->ID );
    echo $thumb_id ? esc_attr( wp_get_attachment_caption( $thumb_id ) ) : esc_attr( get_the_title() );
    ?>"
  • 为不同的wordpress页面调用不同的顶部菜单

    下面给出 4 种在 WordPress 里“让不同页面(或不同模板、不同文章类型)调用不同顶部菜单”的常用做法,从最轻量到最灵活依次排列。你可以按自己熟悉程度与项目复杂度任选其一,也可以组合使用。

    一、纯后台设置:利用「菜单位置 + 条件挂钩」(无需写代码,适合只有 2-3 套菜单的小站点)

    在「外观 → 菜单」里把菜单 A 设为 primary,菜单 B 设为 secondary(多主题可能叫 top / header / mobile 等)。

    安装插件「Conditional Menus」(免费,无设置页)。

    进入「外观 → 菜单 → Manage Locations」标签页,你会看到每个菜单位置右侧多了一个 «Conditional Menu» 下拉框。

    给 primary 位置先选「菜单 B」

    点击 «+ Conditions»,在弹窗里勾选

    – 首页:Home

    – 某分类:Category → Products

    – 某页面:Page → Contact

    保存即可。

    逻辑:插件会在 wp_nav_menu_args 钩子内,按你设定的条件实时把菜单 slug 换掉,性能影响几乎为 0,且升级主题不会丢。

    二、主题自带「页面级菜单」字段(部分商业主题/页面构建器已集成,最直观)

    编辑页面 → 找到「Page Settings / Theme Options」面板 → 下拉「Custom Header Menu」。

    选想要的菜单 → 更新。

    主题作者在 header.php(或相应模板)里已预埋代码,大致如下:

    $custom_menu = get_post_meta( $post->ID, '_custom_top_menu', true );
    wp_nav_menu( array(
        'menu'            => $custom_menu ? $custom_custom : 'primary',
        'container'       => 'nav',
        'container_class' => 'top-nav'
    ) );

    如果你用的主题没这功能,可以自己把上面代码放进 header.php,再配合下文「三」的高级做法,把 _custom_top_menu 做成下拉选单即可。

    三、在子主题里用 filter 动态替换(推荐,代码量极少、可控、可版本管理)

    给 functions.php 加一段:

    /**
     * 根据不同条件返回不同菜单
     * @param array $args  wp_nav_menu 原始参数
     * @return array
     */
    function my_conditional_nav_menu( $args ) {
        // 只动 primary 位置,其它位置原样返回
        if ( 'primary' !== $args['theme_location'] ) {
            return $args;
        }
    
        // 1. 首页单独菜单
        if ( is_front_page() ) {
            $args['menu'] = 'home-menu';   // 菜单别名(slug)
        }
        // 2.「产品」分类及其下属文章
        elseif ( is_tax( 'product_cat' ) || is_singular( 'product' ) ) {
            $args['menu'] = 'product-menu';
        }
        // 3. ID 为 42 的页面
        elseif ( is_page( 42 ) ) {
            $args['menu'] = 'landing-menu';
        }
        // 4. 默认 fallback
        else {
            $args['menu'] = 'primary-menu';
        }
    
        return $args;
    }
    add_filter( 'wp_nav_menu_args', 'my_conditional_nav_menu' );

    把需要的菜单先建好,记下「菜单别名」填到代码里即可。

    性能:只在调用 wp_nav_menu() 时触发一次过滤,几乎无额外查询。

    维护:升级主题只要子主题还在就安全;换主题也只需把 ‘primary’ 改成新主题的 location 名称。

    四、完全自定义:新建 Page Template + 新 Menu Location (适合「同一站点不同频道」型项目,如 官网/B2B/B2C 三合一)

    注册新菜单位置(functions.php):

    add_action( 'after_setup_theme', function () {
        register_nav_menus( array(
            'primary'      => '主站菜单',
            'corporate'    => '企业频道菜单',
            'shop'         => '商城频道菜单',
        ) );
    } );

    新建页面模板 template-corporate.php,在文件头部声明:

    <?php
    /**
     * Template Name: 企业频道
     */
    get_header( 'corporate' );   // 自动加载 header-corporate.php

    复制一份 header-corporate.php,把里面的

    wp_nav_menu( array( 'theme_location' => 'corporate' ) );

    换成刚注册的 corporate 位置。

    4. 后台「外观 → 菜单」里给 corporate 位置分配菜单;发布页面时选「企业频道」模板即可。

    5. 优势:每套频道可以有独立的 header/footer/sidebar,菜单只是其中一部分;后期还可以配独立样式表与脚本。

    常见坑 & 调试技巧

    缓存:用了页面缓存插件(WP Rocket、LiteSpeed Cache)记得把「菜单」从缓存中排除,或给不同页面打不同缓存标签。

    多语言:WPML/Polylang 会给每种语言生成独立菜单,记得在条件判断里加 ICL_LANGUAGE_CODE 或 pll_current_language()。

    移动端:检查主题是否对「Mobile Menu」另外写了 walker,必要时把上面的 filter 同样应用到 mobile 位置。

    菜单找不到:确认填的是「菜单别名」而不是标题;别名在「外观 → 菜单 → 编辑」里展开「菜单设置」可见。

    一句话总结

    只想「某几个页面换个菜单」→ 装 Conditional Menus 最快;

    想代码干净、可 Git 管理 → 用子主题 + wp_nav_menu_args filter;

    要做「多频道」大站 → 注册新菜单位置 + 多套 header 模板最清晰。

    照着上面 4 种方案任选其一,10 分钟内就能把「不同页面不同顶部菜单」跑通。

  • wordpress调用当前年份的多种方式

    在WordPress中,有多种方式可以调用当前年份,这些方法可以根据你的具体需求和使用场景来选择。以下是一些常见的调用当前年份的方法:

    1. 使用PHP的 date() 函数

    这是最直接的方法,使用PHP的 date() 函数来获取当前年份。

    <?php echo date('Y'); ?>

    适用场景:适用于任何需要动态显示当前年份的地方,如版权信息、页脚等。

    <p>&copy; <?php echo date('Y'); ?> Your Website Name</p>

    2. 使用WordPress的 get_the_date() 函数

    虽然 get_the_date() 主要用于获取文章的日期,但也可以用来获取当前日期。

    <?php echo get_the_date('Y'); ?>

    适用场景:适用于需要在文章或页面中动态显示当前年份的地方。

    <p>Current Year: <?php echo get_the_date('Y'); ?></p>

    3. 使用WordPress的 current_time() 函数

    current_time() 函数可以获取当前时间,支持多种格式。

    <?php echo current_time('Y'); ?>

    适用场景:适用于需要获取当前时间的多种格式,包括年份。

    <p>Current Year: <?php echo current_time('Y'); ?></p>

    4. 使用WordPress的 wp_date() 函数(WordPress 5.3+)

    从WordPress 5.3开始,wp_date() 函数提供了一种更灵活的方式来获取日期和时间。

    <?php echo wp_date('Y'); ?>

    适用场景:适用于需要更灵活地处理日期和时间的场景。

    <p>Current Year: <?php echo wp_date('Y'); ?></p>

    5. 使用WordPress的 get_option() 函数

    如果你在WordPress的设置中设置了特定的日期格式,可以使用 get_option() 函数来获取当前日期。

    <?php echo date(get_option('date_format')); ?>

    适用场景:适用于需要使用WordPress设置中的日期格式。

    <p>Current Year: <?php echo date(get_option('date_format')); ?></p>

    6. 使用JavaScript动态显示当前年份

    如果你需要在前端动态显示当前年份,可以使用JavaScript。

    <script>
    document.addEventListener('DOMContentLoaded', function() {
        var currentYear = new Date().getFullYear();
        document.getElementById('current-year').textContent = currentYear;
    });
    </script>
    <p>&copy; <span id="current-year"></span> Your Website Name</p>

    适用场景:适用于需要在前端动态更新年份的场景,如版权信息。

    <p>&copy; <span id="current-year"></span> Your Website Name</p>

    7. 使用短代码调用当前年份

    你可以在主题的 functions.php 文件中定义一个短代码,然后在文章或页面中使用这个短代码来调用当前年份。

    function current_year_shortcode() {
        return date('Y');
    }
    add_shortcode('current_year', 'current_year_shortcode');

    适用场景:适用于需要在文章或页面中动态显示当前年份的地方。

    <p>&copy; [current_year] Your Website Name</p>

    date(‘Y’):最简单直接的方法,适用于大多数场景。

    get_the_date(‘Y’):适用于文章或页面中。

    current_time(‘Y’):适用于需要更灵活的时间处理。

    wp_date(‘Y’):适用于WordPress 5.3及以上版本,更灵活。

    date(get_option(‘date_format’)):适用于使用WordPress设置中的日期格式。

    JavaScript:适用于前端动态更新。

    短代码:适用于文章或页面中动态显示。

    根据你的具体需求选择合适的方法即可。

  • 跨子域名WordPress内容调用方法

    同一域名下的wordpress网站,aaa.wodepress.com调用www.wodepress.com某个分类下的内容(标题、摘要、特色图)的实现方法,以下是详细的代码:

    // 直接查询数据库获取内容
    function get_posts_from_main_site($category_slug, $limit = 5) {
        global $wpdb;
        
        // 假设主站ID为1(多站点环境)或使用同一数据库
        $table_prefix = 'wp_'; // 根据实际情况调整
        
        $query = $wpdb->prepare("
            SELECT p.ID, p.post_title, p.post_excerpt, p.post_date, p.guid
            FROM {$wpdb->prefix}posts p
            INNER JOIN {$wpdb->prefix}term_relationships tr ON p.ID = tr.object_id
            INNER JOIN {$wpdb->prefix}term_taxonomy tt ON tr.term_taxonomy_id = tt.term_taxonomy_id
            INNER JOIN {$wpdb->prefix}terms t ON tt.term_id = t.term_id
            WHERE p.post_type = 'post' 
            AND p.post_status = 'publish'
            AND tt.taxonomy = 'category'
            AND t.slug = %s
            ORDER BY p.post_date DESC
            LIMIT %d
        ", $category_slug, $limit);
        
        $posts = $wpdb->get_results($query);
        
        $result = array();
        foreach ($posts as $post) {
            $thumbnail_id = get_post_thumbnail_id($post->ID);
            $thumbnail_url = $thumbnail_id ? wp_get_attachment_image_url($thumbnail_id, 'medium') : '';
            
            $result[] = array(
                'title' => $post->post_title,
                'excerpt' => $post->post_excerpt,
                'date' => $post->post_date,
                'link' => get_permalink($post->ID),
                'featured_image_url' => $thumbnail_url
            );
        }
        
        return $result;
    }

    如果两个站点共享数据库,可以直接查询