Dynamic content in a widget

时间:2012-03-15 作者:stefanz

我必须制作一个小部件,用户可以从中添加一些图像,然后我将随机显示其中的一些图像,并在页面刷新时自动更改。问题是图像的数量未知,可能是2个,也可能是5个。我曾考虑使用“添加更多”jQuery按钮,但在处理数组中的数据时遇到了问题。

以前有人做过这样的事吗?如果你对此有其他想法,我很高兴听到。

注意:如果你知道一个使用这种功能的小部件,请毫不犹豫地告诉我,也许我可以从中获得灵感。

2 个回复
SO网友:ifdion

我在开发插件或小部件方面几乎没有经验,但我相信这在自定义WordPress主题中肯定是可行的。

在侧边栏中输出ajax多文件上传表单。LinkLinkCodexCodex如果希望将此方法作为小部件。如果使用适当的ajax,步骤2和3上的函数将是相同的method.

希望这有帮助。

SO网友:brasofilo

这可以通过相当简单的元素来解决:一个短代码和文本小部件。

首先,我们为小部件启用短代码功能:

// Enable shortcodes in the Text Widget
add_filter( \'widget_text\', \'do_shortcode\' );
有用:Shortcodes everywhere

然后,我们创建一个短代码,从给定的帖子或页面抓取图像,并显示随机数。由于我们将以随机顺序加载,因此在每个页面加载时,图像都会有所不同。

用法将为[random-image id="99" total="4"]. “id”是帖子/页面id。您甚至可以将此帖子留在Draft 状态,因此它不会显示在站点中。“total”是可选的,表示要显示的图像数,如果附加的图像较少,则无所谓,它将显示所有存在的图像。

您可以有几个帖子来存储图像,并为每个帖子使用一个小部件。可以创建自定义帖子类型get_posts 部分内容变得复杂了,但我将把它作为练习留给读者;)

查看评论以了解更多详细信息:

// Declare our shortcode
add_shortcode( \'random-image\', \'wpse_45638_random_image\' );

/**
 * Shortcode
 */
function wpse_45638_random_image( $atts, $content = null )
{   
    // ID not provided, bail out
    if( !isset( $atts[\'id\'] ) )
        return;

    // Initiate variables, 
    $html = \'\';
    $total = isset( $atts[\'total\'] ) ? $atts[\'total\'] : -1;
    $gallery = wpse_45638_get_gallery( $atts[\'id\'], $total );

    // No images, bail out
    if( !$gallery )
        return;

    // Build the thumbnails
    foreach( $gallery as $image )
    {
        $html .= \'<div style="padding:10px;width:75px;float:left"><a href="\'
            . $image[\'file\'] 
            . \'"><img src="\'
            . $image[\'t_file\']
            . \'"  style="width:100%"></a></div> \';
    }

    // Return contents of the shortcode
    return $html;
}

/**
 * Get images from a post
 *
 * @param int $post_id Target post/page/cpt
 * @param int $total   Number of images to retrieve
 */ 
function wpse_45638_get_gallery( $post_id, $total )
{
    $args = array( 
        \'post_type\'     => \'attachment\',
        \'numberposts\'   => $total,
        \'post_parent\'   => $post_id,
        \'post_mime_type\' => \'image\',
        \'orderby\' => \'rand\'
    ); 

    $attachments = get_posts( $args );
    $arr = array();

    if ($attachments) 
    {
        foreach ( $attachments as $img ) 
        {
            // Grab our data - This can be improved
            $data = wp_get_attachment_metadata( $img->ID );
            $thumb = wp_get_attachment_thumb_url( $img->ID);loga($thumb);
            $file = wp_get_attachment_url( $img->ID);loga($file);
            $arr[] = array( 
                \'width\' => $data[\'width\'],
                \'height\' => $data[\'height\'],
                \'file\' => $file,
                \'t_width\' => $data[\'sizes\'][\'thumbnail\'][\'width\'],
                \'t_height\' => $data[\'sizes\'][\'thumbnail\'][\'height\'],
                \'t_file\' => $thumb,
            );
        }
        return $arr;
    }
    return false; // no images found
}

结束