最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

multisite - TimberImage an image from another site in network

programmeradmin0浏览0评论

I have a multisite with one of the sites being a product catalog. In the 'main site' I have a setup with ACF with flexible content blocks. One of the blocks is a block which shows products (from another site in the network).

I have the post ids for the posts I want to retrieve from the product catalog so I get all ACF fields/post info with a function.

function get_product_info( $product_id ) {
    if ( false != $product_id ) {
        switch_to_blog( 11 );
        $fields = get_field_objects( $product_id );
        restore_current_blog();

        return $fields;
    }

    return false;
}

This gives me (almost) all info I need to output product info. The image which is used is stored in one of these fields which are returned.

I need a custom function to retrieve the (image) info since the info is otherwise retrieved from an image within the current site, instead of the product catalog. So I return the file location and then TimberImage that again to get a proper object. That seems to work but then size is ignored.

function get_product_image( $image_id ) {
    if ( false != $image_id ) {
        switch_to_blog( 11 );
        $image = new Timber\Image($image_id);
        restore_current_blog();

        return $image->guid;

    }

    return false;
}

Same goes for the permalink

function get_product_link( $product_id ) {
    if ( false != $product_id ) {
        switch_to_blog( 11 );
        $post = get_post( $product_id );
        $link = get_permalink( $post->ID );
        restore_current_blog();

        return $link;

    }

    return false;
}

I use a macro for the images, which is defined as this.

{% macro image( image, size, fallback, alt, title, class ) %}
    {% set fallback = fallback|default(0) %}
    {% if image and image.src %}
        <img src="{{ image.src(size) }}" alt="{{ image.alt }}" title="" />
    {% elseif fallback %}
        <img src="{{ fallback }}" alt="" title="" />
    {% endif %}
{% endmacro %}

So my Twig file to output a product is as follows.

{% set product_info  = function( 'get_product_info', post.ID ) %}
{% set product_image = TimberImage( function( 'get_product_image', product_info.catalogue_product_image.value.ID ) ) %}
<div class="product-item">
    <header>
        {% if product_image %}
            <figure class="media product__image">
                <a href="{{ function( 'get_product_link', post.ID ) }}">
                    {{ macro.image( product_image, 'thumbnail', options.images.fallback_product_teaser, alt, title, class) }}
                </a>
            </figure>
        {% endif %}
    </header>

    <div class="product-item__content">
        <h2 class="product-item__title">
            <a href="{{ function( 'get_product_link', post.ID ) }}">
                {{ post.title }}
            </a>
        </h2>

        {# more code which is not relevant #}
    </div>
</div>

I have a few issues which puzzle me:

  1. I can't seem to get a proper Timber object which allows me to properly echo its values like link, title, etc.
  2. if I don't use TimberImage twice I don't seem to get any image but the sizing of an image doesn't work. It always shows full size.
  3. the permalink seems to 'ignore' the post type. The permalink of a products should be domain/product/product-slug but returns domain/product-slug. If I retrieve the permalink from within the product catalog, it does give me the correct link.

Note for a mod: plz add the tag timber-image.

发布评论

评论列表(0)

  1. 暂无评论