WordPress.org

Ready to get started?Download WordPress

Forums

Events Manager
[resolved] How to display custom attributes only when filled in? (7 posts)

  1. zomigi
    Member
    Posted 1 year ago #

    I created a number of custom attributes for my events, and I have their content displaying on my events pages without a problem. However, not every event has every attribute filled in. How can I show the content of a custom attribute only when it is filled in, and otherwise show nothing?

    Right now, I'm using the Formatting setting area of EM to control what displays on my single event page. Here's what that looks like:

    <span class="meta date">#F #j #@_{\&\n\d\a\s\h\;j}, #Y{has_location}, in #_LOCATIONNAME{/has_location}</span>
    <span class="meta">#_CATEGORYNAME:</span>
    <h2>"#_ATT{Session Title}"</h2>
    #_EVENTNOTES
    <ul class="list-simple">
    <li><a href="#_ATT{Follow-up Blog Post}">Get related resources</a></li>
    <li><a href="#_ATT{Slideshare URL}">View on Slideshare</a></li>
    <li><a href="#_ATT{Recording URL}">View recording</a></li>
    <li><a href="#_ATT{Conference Site}">Go to conference site</a></li>
    </ul>

    I'm not that skilled at PHP, so please be gentle in your reply. :-)

    http://wordpress.org/extend/plugins/events-manager/

  2. agelonwl
    Member
    Posted 1 year ago #

    you need to create custom conditional placeholder for this, try this similar thread - http://wordpress.org/support/topic/plugin-events-manager-custom-conditional-placeholder-not-working?replies=12

    *please see my sample snippet

  3. zomigi
    Member
    Posted 1 year ago #

    Thanks agelonwl, I tried it on one of my custom placeholders and it worked perfectly.

    Is there a way to modify the code to work with all four of my custom placeholders without having to copy that function multiple times? Just want to keep the code as DRY as possible. Thanks!

  4. agelonwl
    Member
    Posted 1 year ago #

    yes, maybe adding new "if else conditions"

    e.g.

    if( is_object($EM_Event) && preg_match('/^has_venueurl$/',$condition, $matches) ){
    
    }else if( is_object($EM_Event) && preg_match('/^has_menuurl$/',$condition, $matches) ){
    
    }elseif( is_object($EM_Event) && preg_match('/^has_appleurl$/',$condition, $matches) ){
    
    }
  5. zomigi
    Member
    Posted 1 year ago #

    Actually, I spoke too soon--it's not working for me even with only one of the custom attributes in there. :-( It's never showing the piece of data, even when the attribute does have some content in it.

    Here's my function:

    function my_em_has_attribute_event_output_condition($replacement, $condition, $match, $EM_Event){
        if( is_object($EM_Event) && preg_match('/^has_slideshare$/',$condition, $matches) ){
        	if( !in_array($args['slideshare_url'],$EM_Event->event_attributes) && !empty($EM_Event->event_attributes['slideshare_url']) ){
                $replacement = preg_replace("/\{\/?$condition\}/", '', $match);
            }else{
                $replacement = '';
            }
        }
        return $replacement;
    }
    add_action('em_event_output_condition', 'my_em_has_attribute_event_output_condition', 1, 4);

    And then here's how I'm using it:

    {has_slideshare}<li><a href="#_ATT{Slideshare URL}">View on Slideshare</a></li>{/has_slideshare}

    What am I doing wrong?

  6. agelonwl
    Member
    Posted 1 year ago #

    could it because you are using slideshare_url instead of Slideshare URL (#_ATT{Slideshare URL}) ?

  7. zomigi
    Member
    Posted 1 year ago #

    Cool, I got it fixed, and got all four custom attributes working. The code is not at all DRY, but I'm not a programmer to fix it, so I'll have to live with it! :-)

    Thanks very much for your help!

Topic Closed

This topic has been closed to new replies.

About this Plugin

About this Topic