Forum Replies Created

Viewing 15 replies - 1 through 15 (of 33 total)
  • Thread Starter Angela

    (@g33kg0dd3ss)

    Thanks, Barry!

    Yep, after looking at it with fresh eyes, this was a case of user error. Now that I know, I can see about writing a snippet that will pull the metadata from the download itself rather than its host page.

    Thread Starter Angela

    (@g33kg0dd3ss)

    Wonderful!! Thank you!

    True, it would require a lot of individual templates if every link had different text. Hopefully the plugin author will take your suggestion under advisement. ??

    You can use a custom template to do this. ??

    Your template file (uploaded to /yourtemplate/download-monitor/ and named content-download-dllink.php, for example) might look something like:

    <?php
    /**
     * Download link custom template
     */
    
    if ( ! defined( 'ABSPATH' ) ) {
    	exit;
    } // Exit if accessed directly
    ?>
    <a href="<?php $dlm_download->the_download_link(); ?>">Download Our Latest Guide</a>

    …And wherever you want to show the link, use:

    [download id="10" template="dllink"]

    Your other [download] shortcodes will still use the default template from your Download Monitor settings.

    Hope this helps! ??

    Thread Starter Angela

    (@g33kg0dd3ss)

    Agreed, it’s not the best solution, but it was necessary for one of my clients’ site’s download templates. :-/ (Plus it’s now become useful in other sites where I’m using this plugin.)

    Thanks for the tip about $dlm_download->id (corrected from $download->id in your reply). Works like a charm!

    Any way the post_content bit will make it into a future release? It will definitely give custom templates a bit more flexibility; I’m using post_content and short_content in different ways in the same template. It’s also a bit confusing to have a big Post Content field on the Add Download page and not actually be able to reference its value in any way. ??

    Thread Starter Angela

    (@g33kg0dd3ss)

    Nosing around in the code, I found that the plugins/download-monitor/includes/class-dlm-download.php houses all the functions used in the display of download details. There was no function that called post_content, so I made one!

    On line 157, between the functions for the_short_description and get_the_image, I added:

    /**
    	 * get_the_post_content function.
    	 *
    	 * @access public
    	 * @return void
    	 */
    	public function get_the_post_content() {
    		return wpautop( do_shortcode( $this->post->post_content ) );
    	}
    
    	/**
    	 * the_post_content function.
    	 *
    	 * @access public
    	 * @return void
    	 */
    	public function the_post_content() {
    		echo $this->get_the_post_content();
    	}

    I can do something similar for the download ID, but I think I might just extract it from the download link.

    Of course, none of this will survive the next plugin update, but hopefully it will make it into the next release. ?? *poke poke*

    Thread Starter Angela

    (@g33kg0dd3ss)

    Thanks for the info! ??

    Thread Starter Angela

    (@g33kg0dd3ss)

    I missed it too! Glad to know there’s a workaround. ??

    Thread Starter Angela

    (@g33kg0dd3ss)

    [ Removed — I’m a big moron and finally found the way to manually update the file count. Other issue moved to its own thread. ]

    Thread Starter Angela

    (@g33kg0dd3ss)

    I should’ve paid more attention to the old plugin’s notes. >.< I’ve got the new plugin installed and the old downloads imported. Thanks!!

    Thread Starter Angela

    (@g33kg0dd3ss)

    Excellent!! Thank you! ??

    Angela

    (@g33kg0dd3ss)

    Brilliant — I was just having this problem and adding the above code to admin-meta-search.php did the trick!

    Thread Starter Angela

    (@g33kg0dd3ss)

    No worries! I found a way to do what I needed, but the meta search would be a nice quality-of-life feature. ?? Thanks again!

    Thread Starter Angela

    (@g33kg0dd3ss)

    Ok, I’ve decided to move away from this idea and instead go with a custom module. Field generation and validation are working great!

    While I don’t need the Tag Generator in order to use my custom shortcode, I’m puzzled by its behavior and was wondering if anyone could help me figure out why it’s doing what it’s doing.

    I used the CF7 select.php module as a template, and though I changed all the relevant instances of “select” to my tag name, when I attempt to generate a tag, I see
    [select eqnlring-###]
    instead of
    [eqnlring eqnlring-###]

    I can’t seem to find a reason why it’s doing this, and I hope someone will be able to clue me in.

    Here is my custom module code in full:

    <?php
    /**
    ** A base module for [eqnlring] and [eqnlring*]
    **/
    
    /* Shortcode handler */
    
    function wpcf7_add_shortcode_eqnlring() {
    	wpcf7_add_shortcode( array( 'eqnlring', 'eqnlring*' ),
    		'wpcf7_eqnlring_shortcode_handler', true );
    }
    
    function wpcf7_eqnlring_shortcode_handler( $tag ) {
    	$tag = new WPCF7_Shortcode( $tag );
    
    	if ( empty( $tag->name ) )
    		return '';
    
    	$validation_error = wpcf7_get_validation_error( $tag->name );
    
    	$class = wpcf7_form_controls_class( $tag->type );
    
    	if ( $validation_error )
    		$class .= ' wpcf7-not-valid';
    
    	$atts = array();
    
    	$atts['class'] = $tag->get_class_option( $class );
    	$atts['id'] = $tag->get_id_option();
    	$atts['tabindex'] = $tag->get_option( 'tabindex', 'int', true );
    
    	if ( $tag->is_required() )
    		$atts['aria-required'] = 'true';
    
    	$atts['aria-invalid'] = $validation_error ? 'true' : 'false';
    
    	$defaults = array();
    
    	if ( $matches = $tag->get_first_match_option( '/^default:([0-9_]+)$/' ) )
    		$defaults = explode( '_', $matches[1] );
    
    	//$multiple = $tag->has_option( 'multiple' );
    	//$include_blank = $tag->has_option( 'include_blank' );
    	//$first_as_label = $tag->has_option( 'first_as_label' );
    
    	//$values = $tag->values;
        $values = array();
        $tag_args = array(
        	'number'                    => 0,
        	'format'                    => 'array',
        	'separator'                 => '',
        	'exclude'                   => '154, 155, 162, 164, 166, 167, 168, 169, 174, 175',
        	'echo'                      => false
        );
        $tag_cloud = wp_tag_cloud($tag_args);
        foreach ($tag_cloud as $tag_name) {
            $values[] = strip_tags($tag_name);
        }
    
    	$labels = $tag->labels;
    
    	if ( $data = (array) $tag->get_data_option() ) {
    		$values = array_merge( $values, array_values( $data ) );
    		$labels = array_merge( $labels, array_values( $data ) );
    	}
    
    	$empty_eqnlring = empty( $values );
    
    	//if ( $empty_eqnlring || $include_blank ) {
    	//	array_unshift( $labels, '---' );
    		array_unshift( $labels, '' );
    		array_unshift( $values, '' );
    	//} elseif ( $first_as_label ) {
    	//	$values[0] = '';
    	//}
    
    	$html = '';
    	$hangover = wpcf7_get_hangover( $tag->name );
    
    	foreach ( $values as $key => $value ) {
    		$selected = false;
    
    		if ( $hangover ) {
    			//if ( $multiple ) {
    			//	$selected = in_array( esc_sql( $value ), (array) $hangover );
    			//} else {
    				$selected = ( $hangover == esc_sql( $value ) );
    			//}
    		} else {
    			if ( ! $empty_eqnlring && in_array( $key + 1, (array) $defaults ) ) {
    				$selected = true;
    			}
    		}
    
    		$item_atts = array(
    			'value' => $value,
    			'selected' => $selected ? 'selected' : '' );
    
    		$item_atts = wpcf7_format_atts( $item_atts );
    
    		$label = isset( $labels[$key] ) ? $labels[$key] : $value;
    
    		$html .= sprintf( '<option %1$s>%2$s</option>',
    			$item_atts, esc_html( $label ) );
    	}
    
    	//if ( $multiple )
    	//	$atts['multiple'] = 'multiple';
    
    	//$atts['name'] = $tag->name . ( $multiple ? '[]' : '' );
    	$atts['name'] = $tag->name;
    
    	$atts = wpcf7_format_atts( $atts );
    
    	$html = sprintf(
    		'<span class="wpcf7-form-control-wrap %1$s"><select %2$s>%3$s</select>%4$s</span>',
    		sanitize_html_class( $tag->name ), $atts, $html, $validation_error );
    
    	return $html;
    }
    
    /* Validation filter */
    
    add_filter( 'wpcf7_validate_eqnlring', 'wpcf7_eqnlring_validation_filter', 10, 2 );
    add_filter( 'wpcf7_validate_eqnlring*', 'wpcf7_eqnlring_validation_filter', 10, 2 );
    
    function wpcf7_eqnlring_validation_filter( $result, $tag ) {
    	$tag = new WPCF7_Shortcode( $tag );
    
    	$name = $tag->name;
    
    	if ( isset( $_POST[$name] ) && is_array( $_POST[$name] ) ) {
    		foreach ( $_POST[$name] as $key => $value ) {
    			if ( '' === $value )
    				unset( $_POST[$name][$key] );
    		}
    	}
    
    	if ( $tag->is_required() ) {
    		if ( ! isset( $_POST[$name] )
    		|| empty( $_POST[$name] ) && '0' !== $_POST[$name] ) {
    			$result['valid'] = false;
    			$result['reason'][$name] = wpcf7_get_message( 'invalid_required' );
    		}
    	}
    
    	if ( isset( $result['reason'][$name] ) && $id = $tag->get_id_option() ) {
    		$result['idref'][$name] = $id;
    	}
    
    	return $result;
    }
    
    /* Tag generator */
    
    add_action( 'admin_init', 'wpcf7_add_tag_generator_eqnlring', 27 );
    
    function wpcf7_add_tag_generator_eqnlring() {
    	if ( ! function_exists( 'wpcf7_add_tag_generator' ) )
    		return;
    
    	wpcf7_add_tag_generator( 'eqnlring', __( 'EQNLR Ingredients List', 'contact-form-7' ),
    		'wpcf7-tg-pane-eqnlring', 'wpcf7_tg_pane_eqnlring' );
    }
    
    function wpcf7_tg_pane_eqnlring( $contact_form ) {
    ?>
    <div id="wpcf7-tg-pane-eqnlring" class="hidden">
    <form action="">
    <table>
    <tr><td><input type="checkbox" name="required" />&nbsp;<?php echo esc_html( __( 'Required field?', 'contact-form-7' ) ); ?></td></tr>
    <tr><td><?php echo esc_html( __( 'Name', 'contact-form-7' ) ); ?><br /><input type="text" name="name" class="tg-name oneline" /></td><td></td></tr>
    </table>
    
    <table>
    <tr>
    <td><code>id</code> (<?php echo esc_html( __( 'optional', 'contact-form-7' ) ); ?>)<br />
    <input type="text" name="id" class="idvalue oneline option" /></td>
    
    <td><code>class</code> (<?php echo esc_html( __( 'optional', 'contact-form-7' ) ); ?>)<br />
    <input type="text" name="class" class="classvalue oneline option" /></td>
    </tr>
    </table>
    
    <div class="tg-tag"><?php echo esc_html( __( "Copy this code and paste it into the form left.", 'contact-form-7' ) ); ?><br /><input type="text" name="select" class="tag wp-ui-text-highlight code" readonly="readonly" onfocus="this.select()" /></div>
    
    <div class="tg-mail-tag"><?php echo esc_html( __( "And, put this code into the Mail fields below.", 'contact-form-7' ) ); ?><br /><input type="text" class="mail-tag wp-ui-text-highlight code" readonly="readonly" onfocus="this.select()" /></div>
    </form>
    </div>
    <?php
    }
    
    ?>
    Thread Starter Angela

    (@g33kg0dd3ss)

    Ah, gotcha! I was thinking that formatting them as early as possible in the flow of the code would help, but you make a good point. ?? I’ll un-tweak my functions.php and instead play around with shortcode.php.

    As always, thanks for the prompt response, and keep up the good work!!

Viewing 15 replies - 1 through 15 (of 33 total)