使用Envira Gallery和ACF

时间:2018-03-22 11:28:27

标签: wordpress advanced-custom-fields image-gallery

我不知道是否有人能够帮助我,但我无法让Envira Gallery与ACF专业人士合作。

我想要做的就是让Envira Gallery接收我用ACF制作的画廊。我应该阅读的内容应该是可能的。它现在有点工作。我已经阅读了this教程大约1000次,以检查我是否做错了什么,但我似乎无法让它工作。

我在Envira Gallery中创建了一个名为New fotos的图库,它获得了ID 7522,我还创建了一个名为get_my_fotos的ACF图库字段并在其中放置了一些图像,按照教程的指示。我已经从评论中的github链接中获取了代码,因为这是一个较新的代码。

我的HTML:

<?php get_header(); ?>
    <div class="container" style="min-height:300px;margin-top:90px;">
        <?php echo do_shortcode('[envira-gallery id="7522"]'); ?>
    </div>
<?php get_footer(); ?>

现在是使Envira Gallery能够与ACF合作的脚本:

/*
 * Populate Envira Gallery with ACF gallery field
 *
 * Filters the gallery $data and replaces with the image data for our images in the ACF gallery field.
 *
 * @uses ACF Pro
 * @uses Envira Gallery
 * @param $data
 * @param $gallery_id
 */
function envira_acf_gallery( $data, $gallery_id ) {

    // Target desired Envira gallery using ID
    if ( $data[ "id" ] == 7522 ) {

        //Setup new array to populate Envira gallery
        $newdata = array();

        // Don't lose the original gallery id and configuration
        $newdata[ "id" ] = $data[ "id" ];
        $newdata[ "config" ] = $data[ "config" ];

        if ( function_exists( 'get_field' ) )
        // Get array of images data from desired ACF gallery field
            $image_ids = get_field( 'get_my_fotos' );

        // Check to make sure array has images
        if( is_array( $image_ids ) ) {

            // Populate the Envira gallery with meta from the ACF gallery
            foreach( $image_ids as $image_id ) {
                $newdata[ "gallery" ][ ( $image_id["id"] ) ][ "status" ] = 'active';    
                $newdata[ "gallery" ][ ( $image_id["id"] ) ][ "src" ] = $image_id["url"];
                $newdata[ "gallery" ][ ( $image_id["id"] ) ][ "title" ] = $image_id["title"];
                $newdata[ "gallery" ][ ( $image_id["id"] ) ][ "link" ] = $image_id["url"];
                $newdata[ "gallery" ][ ( $image_id["id"] ) ][ "alt" ] = $image_id["alt"];
                $newdata[ "gallery" ][ ( $image_id["id"] ) ][ "thumb" ] = $image_id["sizes"]["thumbnail"];
            }
        }
        // Return the new array of images
        return $newdata;
    }

}
// Add new image data to the envira gallery
add_filter( 'envira_gallery_pre_data', 'envira_acf_gallery', 10, 2);

现在,如果我检查我的检查员,我会看到:

<div id="envira-gallery-wrap-7496" class="envira-gallery-wrap envira-gallery-theme-base envira-lightbox-theme-base_dark" itemscope="" itemtype="http://schema.org/ImageGallery">
</div>

没有脚本我会看到以下内容:

<div id="envira-gallery-wrap-7522" class="envira-gallery-wrap envira-gallery-theme-base envira-lightbox-theme-base_dark" itemscope="" itemtype="http://schema.org/ImageGallery">
    </div>

所以它正在挑选一些代码,但它看起来像是我删除的一个旧库ID。但我似乎无法理解为什么它没有拿起脚本中给出的ID。因此没有显示图像。

以前有人试过这个吗?我希望这里有一些帮助。我也在教程中试过了这个脚本但是没有用。

2 个答案:

答案 0 :(得分:2)

我刚遇到同样的问题。添加以下内容解决了它:

from kivy.app import App
from kivy.lang import Builder
from kivy.clock import Clock
import random
import time
from kivy.uix.image import Image
from kivy.uix.widget import Widget
from kivy.uix.button import Button
from kivy.core.window import Window
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.screenmanager import ScreenManager, Screen


#############################################################################

class Collider(Image):
    pass

#############################################################################

root = FloatLayout()

class GameScreen(Screen):
    def __init__(self, **kwargs):
        super(GameScreen, self).__init__(**kwargs)
        self.wimg = Basic(size = (32,32), pos=(200, 100), source='sprite.png', size_hint=(None, None), allow_stretch=True, keep_ratio=False)
        self.block = Collider(size = (32,32), pos_hint={'x': 0.5, 'y':0.5}, source = 'block.png', size_hint=(None, None), allow_stretch=True, keep_ratio=False)

    def playy(self):
        root.add_widget(self.wimg)
        Clock.schedule_interval(self.wimg.update, 1.0 / 60.0)

    def worldgen1(self):
        self.add_widget(root)
        root.add_widget(self.block)

    def on_enter(self):
        self.worldgen1()
        self.playy()

#############################################################################

class Basic(Image):

    pFrame = 0

    def __init__(self, **kwargs):
        super(Basic, self).__init__(**kwargs)
        self._keyboard = Window.request_keyboard(None, self)
        if not self._keyboard:
            return
        self._keyboard.bind(on_key_down=self.on_keyboard_down)

    def on_keyboard_down(self, keyboard, keycode, text, modifiers):
        if keycode[1] == 'left':
            self.x -= 10
        elif keycode[1] == 'right':
            self.x += 10
        elif keycode[1] == 'up':
            self.y += 10
        elif keycode[1] == 'down':
            self.y -= 10
        else:
            return False
        return True

    def update(self, dt):
        self.pFrame += 1
        if self.parent.parent.block.collide_widget(self.parent.parent.wimg):
            print ("collide with", self.parent.parent.block)

#############################################################################

class MeinApp(App):

    def build(self):
        sm = ScreenManager()
        sm.add_widget(GameScreen(name='gameplay'))
        return sm

if __name__ == '__main__':
    MeinApp().run()

有关详细信息,请参阅How to Remove Fragment Cache from Envira

答案 1 :(得分:1)

解决此问题的另一种方法是使用 Envira Gallery 提供的动态插件。如果使用简码或经典编辑器(不适用于块编辑器),您可以将其设置为自动将默认 WordPress 画廊显示为 Envira 画廊。然后,您可以使用 ACF 画廊字段并将数据输出为 WordPress 画廊,并显示为 Envira 画廊。

Envira 库的配置说明位于 Envira Dynamic Addon page

从 ACF Gallery 文档中提取的用于显示短代码的代码是:

// Load value (array of ids).
$image_ids = get_field('gallery');
if( $image_ids ) {

// Generate string of ids ("123,456,789").
$images_string = implode( ',', $image_ids );

// Generate and do shortcode.
// Note: The following string is split to simply prevent our own website from rendering the gallery shortcode.
$shortcode = sprintf( '[' . 'gallery ids="%s"]', esc_attr($images_string) );
echo do_shortcode( $shortcode );
}

我已经在本地主机站点上检查过它并且工作正常。由于它使用短代码,因此可能不太容易受到 Envira 图库代码更改引起的问题的影响。