WordPress.org

Ready to get started?Download WordPress

Forums

[Plugin: NextGEN Gallery] Can the tagcloud be in a sidebar widget? (11 posts)

  1. Gene53
    Member
    Posted 4 years ago #

    Hi,

    If anyone knows of a way to insert the [tagcloud] shortcode in a sidebar widget, please share the wisdom.

  2. INKstar
    Member
    Posted 4 years ago #

    Yeah, that would be nice!!

  3. Gene53
    Member
    Posted 4 years ago #

    Yeah, that would be nice!!

    IMO, a sidebar widget would be a plus and a heck of a lot better than on a page.

  4. katimus_prime
    Member
    Posted 4 years ago #

    It really would.

  5. rughooking
    Member
    Posted 4 years ago #

    Got the tag cloud in the sidebar by adding add_filter('widget_text', 'do_shortcode'); to functions.php. The problem is that the results also show in the sidebar. Need to learn more to figure this out.

  6. MaryE
    Member
    Posted 4 years ago #

    Rughooking,

    I got it to work with some code changes, provided both the tagcloud and its gallery are on the same page. Not sure that is what you are looking for. If you are, happy to share.

    It involves a change to the nggfunctions.php file and a one line modification to the short codes (the version I had did not pass on the attributes from the shortcode).

    With these changes, I can control the output of the shortcode:

    [tagcloud show=cloud] shows the tagcloud only
    [tagcloud show=gallery] shows the gallery only

    I changed the default to show both. Not fully tested.

    Also added a title into the gallery to indicate which tag is being shown. So if the target page/post is the same for both the tag cloud and gallery, it's ok. I'm having a few more challenges with targeting the output to another page from an attribute. Different file, different set of parameters ...

    M.

  7. capotea
    Member
    Posted 3 years ago #

    I'm very interested in how you did this MaryE.
    Can you tell me?

  8. Gene53
    Member
    Posted 3 years ago #

    @MaryE Wow! Once you have all the code and the bugs ironed out, will you be making this into a plugin?

  9. bluejpro
    Member
    Posted 3 years ago #

    @MaryE

    Isecond Fokkio and Gene53.

    Can you share your edits to nggfunctions.php?

  10. mr_swede
    Member
    Posted 3 years ago #

    Seems as MaryE won't be back to help out.

    A couple of months ago a I tried to solve this with the help from others writing in this forum. This is what I came up with.

    I created a sidebar widget with PHP code inserted.

    First, make sure that you install the plugin Exec-PHP. There are other plugins that also enable PHP execution within posts and pages but I only tested it with Exec-PHP.

    Next, create a page with the name and slug "picturetags" and put [tagcloud] into it.

    Finally, paste the following code into a newly created text widget:

    <ul>
    <?php
    $tags = (array) nggTags::find_tags($param, true);
    foreach( $tags as $tag )
    	{
    	echo "<a href=../wp-content/nggallery/picturetags/?gallerytag=";
    	echo $tag->slug;
    	echo ">";
    	echo "<li>";
    	echo $tag->name;
    	echo "</a>";
    	echo ' ('.$tag->count.')</li>'."\n";
    	}
    unset($tags);
    ?>
    </ul>

    You will probably have to change this part according to your specific site setup:
    "<a href=../wp-content/nggallery/picturetags/?gallerytag=";

    To avoid the page "picturetags" showing up at the front page I use the plugin PageMash wich can be used to hide certain pages.

    To make the page "picturetags" somewhat more appealing I also pasted the following into it (before the [tagcloud] code)

    <?php
    $gallerytag = (get_query_var('gallerytag')); 		// get the slug
    			$gallerytag = str_replace("-", " ", $gallerytag); 	// replace dashes with spaces
    			$gallerytag = ucwords($gallerytag);					// capitalize words
                            echo 'The pictures below are displayed since you clicked the picture tag "'.$gallerytag.'". Click the image.';
    			echo '<h3>'.$gallerytag.'</h3>'; 					// show the result
    ?>
    
    <?php $tags = wp_get_object_terms($image->pid,'ngg_tag') ?>
    
    <?php foreach ( $tags as $tag ) : ?>
       <a href="<?php bloginfo('url'); ?>/picturetags/<?php echo $tag->slug; ?>"><?php echo $tag->name; ?></a>
    <?php endforeach; ?>

    What I still didn't manage to fix is a tagcloud with font sizes corresponding to number times a particular tag is used. Any help with this is appreciated!

  11. MaryE
    Member
    Posted 3 years ago #

    It's been a while since I looked at this, and since then I've lost most of the changes. However, if you look at nggfunctions.php, you will see the tagcloud function -- nggTagCloud().

    This function has two returns in it -- the first returns the gallery if a tag is specified in the querystring. If there is no tag in the querystring, then the second return produces the tagclould itself. So, instead of the returns, you can save these strings into an output and control how they are returned based upon the value in the tag.

    I'd have to recreate the actual behavior I did last year, but as a start you can try the following to always produce the tagcloud regardless of the query sting (see comments for the changes):

    function nggTagCloud($args ='', $template = '') {
        global $nggRewrite;
    
        // $_GET from wp_query
        $tag     = get_query_var('gallerytag');
        $pageid  = get_query_var('pageid');
    /** new output variable to store gallery **/
        $out1 = "";
    
        // look for gallerytag variable
        if ( $pageid == get_the_ID() || !is_home() )  {
            if (!empty( $tag ))  {
    
                $slug =  esc_attr( $tag );
    
    /** change to a variable **/
                $out1  =  nggShowGalleryTags( $slug );
    /** delete the return **/
                /** return $out; **/
            }
        }
    
        $defaults = array(
            'smallest' => 8, 'largest' => 22, 'unit' => 'pt', 'number' => 45,
            'format' => 'flat', 'orderby' => 'name', 'order' => 'ASC',
            'exclude' => '', 'include' => '', 'link' => 'view', 'taxonomy' => 'ngg_tag'
        );
        $args = wp_parse_args( $args, $defaults );
    
        $tags = get_terms( $args['taxonomy'], array_merge( $args, array( 'orderby' => 'count', 'order' => 'DESC' ) ) ); // Always query top tags
    
        foreach ($tags as $key => $tag ) {
    
            $tags[ $key ]->link = $nggRewrite->get_permalink(array ('gallerytag' => $tag->slug));
            $tags[ $key ]->id = $tag->term_id;
        }
    
        $out = '<div class="ngg-tagcloud">' . wp_generate_tag_cloud( $tags, $args ) . '</div>';
    
    /** change to generate both tagcloud and gallery (if gallery exists **/
        return $out . $out1;
    }

    I think it would be better to copy this into some other file instead of changing base code, so this was intended as a start. If I get around to looking at this again this vacation, I'll repost - the last piece is looking into parsing the shortcode and controlling the output of tagcloud and gallery ($out1 and $out).

    What I'd really like to do is produce a widget that can generate a separate page based on a tag page template, but that's a lot more work.

Topic Closed

This topic has been closed to new replies.

About this Topic

Tags