【问题标题】:Woocommerce product images replaced with a gallery pluginWoocommerce 产品图片替换为图库插件
【发布时间】:2015-09-18 10:58:58
【问题描述】:

首先我想分析一下我的问题。使用 Wordpress/Woocommerce,我需要在产品图库中的图片旁边添加视频。 Woocommerce 根本不支持视频。

所以,我想安装一个支持图像和视频的额外图库插件。

现在,我想将特定图像/视频库集合映射到特定产品。我还想在不属于标准文本字段(如描述或简短描述)的新区域中查看此图库集合。让我们说上面的主要产品图片。代表画廊集合 id=1 的 php 代码如下所示:

<?php echo do_shortcode('[wonderplugin_gallery id="1"]'); ?>

问题是我需要画廊收藏 id 是可变的,像这样:

<?php echo do_shortcode('[wonderplugin_gallery id="X"]'); ?>

其中 X 代表特定的画廊收藏。我怎么能将画廊收藏 ID XXXX 连接到我的产品页面 XXXXX?

我有编程技能,但我是 wordpress 代码逻辑的新手。

对我的问题还有其他建议吗,比如可以用更好的插件替换默认产品库的插件?

问候,

【问题讨论】:

  • 您需要为您的产品添加自定义字段,请参阅以下文章:remicorson.com/mastering-woocommerce-products-custom-fields
  • 谢谢,我已经这样做了,而且成功了。唯一的问题是参数中的双引号。如果 id 参数有引号,则插件无法使用 SQL 查询找到图库集合。这是一个错误还是我应该转义这些特殊字符?

标签: wordpress woocommerce gallery product


【解决方案1】:

我会按照 Anand 的建议使用产品自定义字段,或者创建一个包含必要输入字段(或下拉菜单,具体取决于您使用图库插件的方式)的元框。

首先我会创建一个metabox,然后在那个元框中我会从插件中提取信息(画廊 ID 和名称)。从中,您可以创建一个下拉列表。您应该能够按照您的建议从该元框中为每个产品选择 id。例如,这样的事情可能会起作用:

<?php

if ( ! function_exists( 'product_add_meta' ) ){
    function product_add_meta(){
        add_meta_box("gallery_dropdown", "Select Gallery", "product_gallery_meta_box", "product");
    }
}
add_action("admin_init", "product_add_meta");

if ( ! function_exists( 'product_gallery_meta_box' ) ){
    function product_gallery_meta_box( $post ){
        $post_types = array('product');     //limit meta box to certain post types
        global $post;
        $product = get_product( $post->ID );
        $values = get_post_custom( $post->ID );
        $gallery = (isset($values['gallery'][0])) ? $values['gallery'][0] : '';
        wp_nonce_field( 'my_meta_box_nonce', 'meta_box_nonce' );
        ?>
        <p>
            <select name="gallery" id="gallery">
            //example of how the option should look
            <option value="<?php echo $gallery_id; ?>" <?php selected( $gallery, $gallery_id ); ?>><?php echo $gallery_name; ?></option>
                <?php
                //pull options from plugin here and create an option dropdown with foreach
                ?>
            </select>
        </p>
        <?php
    }
}

if ( ! function_exists( 'product_gallery_save_meta_box' ) ){
    function product_gallery_save_meta_box( $post_id ){
        if( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ){
            return;
        }
        if( !isset( $_POST['gallery'] ) || !wp_verify_nonce( $_POST['meta_box_nonce'], 'my_meta_box_nonce' ) ) {
            return;
        }
        if( !current_user_can( 'edit_pages' ) ) {
            return;
        }
        if( isset( $_POST['gallery'] ) ){
            update_post_meta( $post_id, 'gallery', wp_kses( $_POST['gallery'] ,'') );
        }
    }
}
add_action( 'save_post', 'product_gallery_save_meta_box' );

如果你把它放在 functions.php 中,它应该会在你的 woocommerce 产品页面上显示一个名为“Select Gallery”的元框,并带有一个空的下拉菜单。

我没有填写您从用于创建画廊的插件中获得的选项,但应该不会太难。

【讨论】:

  • 我使用自定义文本字段来保存整个简码,而不仅仅是 ID 号。在这种情况下,您可以阅读我之前的答案,我对 id number 中的双引号有疑问。 Gallery 插件可以在 db 中找到该集合。那是插件的错误吗?如果我在 id 参数中保存不带引号的短代码就可以了。
  • 您是否尝试颠倒引号 &lt;?php echo do_shortcode("[wonderplugin_gallery id='X']"); ?&gt; ? php中的引号有一个很好的答案here
  • 不,但我只想将整个简码复制/粘贴到我的自定义文本字段中,而不仅仅是 ID 号。用几句话我不想处理生成的插件的简码。我可能会尝试编辑插件源代码,因为我认为这是一个错误。在我最终决定这里可能出了什么问题之前,我会做一些测试。
【解决方案2】:

一种方法是绑定产品页面 id 和画廊 id。如果您可以更改画廊的 id,则将其更改为与产品页面的 id 匹配。现在您可以使用这两个示例中的任何一个来创建简码。

// outside the loop use global ( uncomment appropriate statement )
// global $product; 
// global $post;

do_shortcode( sprintf( '[wonderplugin_gallery id="%d"]', $product->id ) );
do_shortcode( sprintf( '[wonderplugin_gallery id="%d"]', $post->ID ) );

HERE 是一个插件链接,它显示了管理页面上的大部分 ID。

另一种方法是在编辑产品管理页面(例如名为gallery_id)中创建Custom Field(发布元数据),并在那里保存要使用的画廊ID。要创建简码,请使用 get_post_meta() 检索保存的帖子元数据的函数。

do_shortcode( sprintf( '[wonderplugin_gallery id="%d"]', get_post_meta( $post->ID, 'gallery_id', true ) ) );

要获取图库 id 元数据,请使用 $post-&gt;ID$product-&gt;idget_the_ID() 函数,后者仅在循环内。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-10
    • 2016-09-13
    • 1970-01-01
    • 2013-06-21
    • 2013-07-05
    • 2016-09-10
    • 2016-03-14
    • 1970-01-01
    相关资源
    最近更新 更多