WordPress.org

Ready to get started?Download WordPress

Forums

Pods - Custom Content Types and Fields
[resolved] Display Pod CPTs that have a taxonomy term (13 posts)

  1. hommealone
    Member
    Posted 11 months ago #

    Using Pods, I've created a Custom Post Type (CPT) with name "resource" and a taxonomy w/ name "region" and associated that taxonomy with that CPT. I've created a custom template in my theme to display a list of Resources; this works fine. But when I try to display only Resources with a particular "Regions" taxonomy term, I still get a list of ALL Resources, rather than one that has been filtered by the taxonomy term. Can anyone spot what's wrong with my code, or suggest another method?

    I've tried this (from my template file):

    <?php
    $resource = pods('resource');
    $resource->find('resource_resource_name ASC');
    ?>
    
    <?php while ( $resource->fetch() ) : ?>
    <?php if ( has_term( 'someregion','region' ) ) : ?>
        <?php
          // set our variables
          // (I set my variables here, to retrieve pieces of the CPT and make them into variables.)
        ?>
    <div class="resource" id="resource-<?php echo str_replace(" ","-",$resource_resource_name); ?>">
    <?php
    // My markup for each item, with variables inserted, goes here.
    ?>
    </div>
    <!-- /.resource -->
    <?php endif; ?>
    <?php endwhile; ?>

    Any help appreciated! I've been searching for answers for a full day and nothing I've tried is working!!

    Thanks.

    http://wordpress.org/plugins/pods/

  2. Scott Kingsley Clark
    Member
    Plugin Author

    Posted 11 months ago #

    Try setting the third parameter in has_term like this:

    has_term( 'someregion','region', $resource->id() )

  3. hommealone
    Member
    Posted 11 months ago #

    Thanks! I'm not working this weekend but will try that out next week and report back on how it worked!

  4. hommealone
    Member
    Posted 10 months ago #

    Scott,
    Thanks for the suggestion, but I'm afraid that didn't do it. Even with your addition, I'm still getting ALL of the CPT items, rather than only those with the taxonomy term I'm trying to filter for.

    I was only guessing that nesting that "if" statement inside of the "while" statement would be the way to go. Does that even make sense? Considering the logic in those statements, I'm not understanding why I'm seeing all of the CPT items. If anything, I'd expect to see none rather than all of them...?

  5. Scott Kingsley Clark
    Member
    Plugin Author

    Posted 10 months ago #

    You could try using 'where' in find() to:

    region.name = "Some Value"

  6. hommealone
    Member
    Posted 10 months ago #

    I'm afraid that you're over-estimating my skills in PHP. I don't know what that means, I'm afraid...

  7. hommealone
    Member
    Posted 10 months ago #

    I tried this, but no luck... :

    <?php
    $params = array(
        // Be sure to sanitize ANY strings going here
        'where'=>"regions.name = 'regional_resources'"
    ); 
    
    $resources = pods('resource', $params);
    $resources->find('resource_resource_name ASC');
    ?>
    
    <?php while ( $resources->fetch() ) : ?>
        <?php
          // set our variables
          $resource_resource_name			= $resources->field('resource_resource_name');
          $resource_contact_name_title		= $resources->field('resource_contact_name_title');
    	  $resource_address					= $resources->field('resource_address');
    	  $resource_phone					= $resources->field('resource_phone');
    	  $resource_fax						= $resources->field('resource_fax');
    	  $resource_e_mail					= $resources->field('resource_e_mail');
    	  $resource_website					= $resources->field('resource_website');
    	  $resource_additional_information	= $resources->field('resource_additional_information');
    
    	  // data cleanup
    	  $resource_additional_information       = wpautop( $resource_additional_information );
    	  //$member_photo     = $member_photo[0]['guid'];
        ?>
    <div class="resource" id="resource-<?php echo str_replace(" ","-",$resource_resource_name); ?>">
    <?php if ($resource_resource_name) : ?>
    <h4><?php echo $resource_resource_name; ?></h4>
    <?php endif; ?>
    <?php if ($resource_contact_name_title) : ?>
    <p><?php echo $resource_contact_name_title; ?></p>
    <?php endif; ?>
    <?php if ($resource_address) : ?>
    <p><?php echo nl2br($resource_address); ?></p>
    <?php endif; ?>
    <?php if ($resource_phone) : ?>
    <p>Phone: <?php echo $resource_phone; ?></p>
    <?php endif; ?>
    <?php if ($resource_fax) : ?>
    <p>Fax: <?php echo $resource_fax; ?></p>
    <?php endif; ?>
    <?php if ($resource_e_mail) : ?>
    <p>Email: <?php echo str_replace("@"," [at] ",$resource_e_mail); ?></p>
    <?php endif; ?>
    <?php if ($resource_website) : ?>
    <p>Website: <a href="http://<?php echo $resource_website; ?>" target="_blank"><?php echo $resource_website; ?></a></p>
    <?php echo $resource_additional_information; ?>
    <?php endif; ?>
    </div>
    <!-- /.resource -->
    <?php endwhile; ?>
  8. senyoraangelica
    Member
    Posted 10 months ago #

  9. hommealone
    Member
    Posted 10 months ago #

    Hi again Scott,

    I finally was able to get this to work using my 'if' statement within the loop, but I'd like to understand how to use the 'where' in find() as you suggested; I suspect this will put less load on the server as well?

    So this works:

    <?php
    $params = array(
        'limit' => -1,
        'orderby' => 'resource_resource_name ASC'
    );
    $resources = pods('resource', $params);
    ?>
    
    <?php while ( $resources->fetch() ) : ?>
    <?php if ( has_term( 'my_region','regions', $resources->id() ) ) : ?>
        <?php
          // set our variables
    	  //my variables are here
        ?>
    <div class="resource" id="resource-<?php echo str_replace(" ","-",$resource_resource_name); ?>">
    <!-- (This is where the content goes.) -->
    </div>
    <!-- /.resource -->
    <?php endif; ?>
    <?php endwhile; ?>

    But this doesn't work (it outputs nothing), though I thought it would:

    <?php
    $params = array(
        'limit' => -1,
        'where' => "regions.name = 'my_region'",
        'orderby' => 'resource_resource_name ASC'
    );
    $resources = pods('resource', $params);
    ?>
    
    <?php while ( $resources->fetch() ) : ?>
        <?php
          // set our variables
          // my variables are set here...
        ?>
    <div class="resource" id="resource-<?php echo str_replace(" ","-",$resource_resource_name); ?>">
    <!-- (This is where the content goes.) -->
    </div>
    <!-- /.resource -->
    <?php endwhile; ?>

    I'm suspecting that this is because the 'where' is looking in the 'resources' pod, rather than in the 'regions' taxonomy?

    Any suggestions?

    p.s. - senyoraangelica: thanks but I couldn't find anything in the code you referenced that helped either.

  10. Scott Kingsley Clark
    Member
    Plugin Author

    Posted 10 months ago #

    You would want to use:

    'where' => "regions.name = 'My Region'",

    or:

    'where' => "regions.slug = 'my_region'",

    Depending on what field you want to look at.

  11. hommealone
    Member
    Posted 10 months ago #

    Thanks very much Scott!

    Am I missing something or is there a place where I can find documentation of these kinds of details (identifiers such as [taxonomy].name vs. [taxonomy].slug for example) rather than bothering you via this forum? I've searched through http://pods.io/docs/code/ but either it doesn't seem to be this fine-grained, or I am not navigating through it correctly...

  12. Scott Kingsley Clark
    Member
    Plugin Author

    Posted 10 months ago #

    Check the bottom table in this page, it's super handy and covers just about every case:

    http://pods.io/docs/code/pods/find/

  13. hommealone
    Member
    Posted 10 months ago #

    Thanks Scott. Your help much appreciated!

Reply

You must log in to post.

About this Plugin

About this Topic