我们可以使用特色图片作为第三方网站图片URL吗

时间:2017-11-03 作者:Gnanasekaran Loganathan

在我的例子中,我们从第三方获得一些帖子列表,并导入到我们的自定义帖子类型中。

我的问题是,我们可以使用发布特色图片作为第三方网站图片URL,而不是上传特色图片。

1 个回复
SO网友:Sid

有一些插件可以用来实现这一点。要手动执行此操作,请将以下代码添加到主题的函数中。php

// Check if URL is image
function url_is_image( $url ) {
    if ( ! filter_var( $url, FILTER_VALIDATE_URL ) ) {
        return FALSE;
    }
    $ext = array( \'jpeg\', \'jpg\', \'gif\', \'png\' );
    $info = (array) pathinfo( parse_url( $url, PHP_URL_PATH ) );
    return isset( $info[\'extension\'] )
        && in_array( strtolower( $info[\'extension\'] ), $ext, TRUE );
}

// Add the URL textbox in Fratured image
add_filter( \'admin_post_thumbnail_html\', \'thumbnail_url_field\' );

function thumbnail_url_field( $html ) {
    global $post;
    $value = get_post_meta( $post->ID, \'_thumbnail_ext_url\', TRUE ) ? : "";
    $nonce = wp_create_nonce( \'thumbnail_ext_url_\' . $post->ID . get_current_blog_id() );
    $html .= \'<input type="hidden" name="thumbnail_ext_url_nonce" value="\' 
        . esc_attr( $nonce ) . \'">\';
    $html .= \'<div><p>\' . __(\'Or\', \'txtdomain\') . \'</p>\';
    $html .= \'<p>\' . __( \'Enter the url for external image\', \'txtdomain\' ) . \'</p>\';
    $html .= \'<p><input type="url" name="thumbnail_ext_url" value="\' . $value . \'"></p>\';
    if ( ! empty($value) && url_is_image( $value ) ) {
        $html .= \'<p><img style="max-width:150px;height:auto;" src="\' 
            . esc_url($value) . \'"></p>\';
        $html .= \'<p>\' . __( \'Leave url blank to remove.\', \'txtdomain\' ) . \'</p>\';
    }
    $html .= \'</div>\';
    return $html;
}

// Save the thumbnail with post
add_action( \'save_post\', \'thumbnail_url_field_save\', 10, 2 );

function thumbnail_url_field_save( $pid, $post ) {
    $cap = $post->post_type === \'page\' ? \'edit_page\' : \'edit_post\';
    if (
        ! current_user_can( $cap, $pid )
        || ! post_type_supports( $post->post_type, \'thumbnail\' )
        || defined( \'DOING_AUTOSAVE\' )
    ) {
        return;
    }
    $action = \'thumbnail_ext_url_\' . $pid . get_current_blog_id();
    $nonce = filter_input( INPUT_POST, \'thumbnail_ext_url_nonce\', FILTER_SANITIZE_STRING );
    $url = filter_input( INPUT_POST,  \'thumbnail_ext_url\', FILTER_VALIDATE_URL );
    if (
        empty( $nonce )
        || ! wp_verify_nonce( $nonce, $action )
        || ( ! empty( $url ) && ! url_is_image( $url ) )
    ) {
        return;
    }
    if ( ! empty( $url ) ) {
        update_post_meta( $pid, \'_thumbnail_ext_url\', esc_url($url) );
        if ( ! get_post_meta( $pid, \'_thumbnail_id\', TRUE ) ) {
            update_post_meta( $pid, \'_thumbnail_id\', \'by_url\' );
        }
    } elseif ( get_post_meta( $pid, \'_thumbnail_ext_url\', TRUE ) ) {
        delete_post_meta( $pid, \'_thumbnail_ext_url\' );
        if ( get_post_meta( $pid, \'_thumbnail_id\', TRUE ) === \'by_url\' ) {
            delete_post_meta( $pid, \'_thumbnail_id\' );
        }
    }
}

add_filter( \'post_thumbnail_html\', \'thumbnail_external_replace\', 10, PHP_INT_MAX );

function thumbnail_external_replace( $html, $post_id ) {
    $url =  get_post_meta( $post_id, \'_thumbnail_ext_url\', TRUE );
    if ( empty( $url ) || ! url_is_image( $url ) ) {
        return $html;
    }
    $alt = get_post_field( \'post_title\', $post_id ) . \' \' .  __( \'thumbnail\', \'txtdomain\' );
    $attr = array( \'alt\' => $alt );
    $attr = apply_filters( \'wp_get_attachment_image_attributes\', $attr, NULL );
    $attr = array_map( \'esc_attr\', $attr );
    $html = sprintf( \'<img src="%s"\', esc_url($url) );
    foreach ( $attr as $name => $value ) {
        $html .= " $name=" . \'"\' . $value . \'"\';
    }
    $html .= \' />\';
    return $html;
}
有关更多详细信息,请参阅此答案-https://wordpress.stackexchange.com/a/158568/110516

结束

相关推荐

Massive photogallery import

我有这样一个场景:从一个旧的Wordpress站点在Wordpress中重建大约200个照片库。我所拥有的就是。xml WXR用于post\\u类型的“photogallery”,它基本上创建了图库并附加了一组图像ID。不幸的是,我无法导出“完整的XML”(包含图像、ID和附加的帖子),也无法访问数据库。所以基本上我应该创建一个脚本:读取导出的XML,检索库的原始URL(旧站点仍处于活动状态)打开URL,获取特定的图像和文本,并将其加载到wordpress中,使用文本作为图像描述,并将其与XML中找到的p