WordPress 如何通过短代码显示目标URL的内容

需要在当前使用主题的目录下,通常在wordpres所在目录的/wp-content/theme/中寻找,修改functions.php文件,在底部添加如下代码:

function display_remote_url_content_shortcode( $atts ) {
    $atts = shortcode_atts( array(
        'url' => '', // 默认URL为空
    ), $atts, 'remote_content' );

    $input_url = trim( $atts['url'] ); // 获取原始URL输入并去除空格

    if ( empty( $input_url ) ) {
        return '请提供一个有效的URL。';
    }

    // 判断是否为相对地址
    // 简单的判断逻辑:如果URL不包含 "://" (协议) 且不以 "/" 开头 (网站根目录的绝对路径)
    // 那么我们认为它是一个相对路径,需要拼接
    if ( strpos( $input_url, '://' ) === false && substr( $input_url, 0, 1 ) !== '/' ) {
        // 构建完整的URL:网站主页URL + 相对路径
        // 注意:这里假设相对路径是相对于当前主题或网站根目录。
        // 如果你的相对路径是相对于短代码所在的页面的,则需要更复杂的逻辑。
        // 对于大多数情况,site_url() + 相对路径是合理的。
        $full_url = site_url( '/' . $input_url );
    } else {
        // 如果是完整URL或以斜杠开头的绝对路径,则直接使用
        $full_url = $input_url;
    }

    // 清理并验证最终的URL
    $url = esc_url_raw( $full_url );

    // 再次检查URL是否为空或无效
    if ( empty( $url ) ) {
        return '提供的URL无效。';
    }

    // 使用 wp_remote_get 获取内容
    $response = wp_remote_get( $url );

    if ( is_wp_error( $response ) ) {
        $error_message = $response->get_error_message();
        return "获取远程内容时发生错误: $error_message";
    }

    $body = wp_remote_retrieve_body( $response );

    return wp_kses_post( $body ); // 清理HTML内容以防止XSS攻击
}
// 添加短代码标识remote_content并与display_remote_url_content_shortcode方法关联
add_shortcode( 'remote_content', 'display_remote_url_content_shortcode' );

然后在模版编辑中,使用[短代码标识 url=”链接地址”]短代码来完成相应的设置。

链接支持绝对路径和相对路径。