0

I create a custom post type and wrote a shortcode to display the posts on the front end of my website, but the code only displays one (1) post, and the most recent one. See front-end page here -> https://www.800goldlaw.com/careers. The CPT is the "jobs board".

Here is my code. Any advice for cleaning this code up and making sure all of my posts display on the front end? Thank you!

function locg_view_jobs($atts) {
    $atts = shortcode_atts(
                array( //default values
                'post_type' => 'locg_jobs',
                'post_status' => 'publish',
                ), 
                $atts, 'locgviewjobs' );

    global $post;

    $posts = new WP_query($atts);
    $output = '';
    $terms = get_the_terms( get_the_ID(), 'job_cat'); foreach ($terms as $term) { $job_cat_links[]=$term->name; }
    $job_cat_go = join(",", $job_cat_links);

        if ($posts->have_posts())
            while ($posts->have_posts()):
                $posts->the_post();
                $out = '<div class="job_post"><h4><a href=" ' . get_the_permalink() . '" title="Apply Now" />' . get_the_title() . '</a></h4>
                        <div class="jobs_meta">
                        <span class="meta">Posted Date:</span> ' . get_the_date() . '</span> | <span class="meta">Open Until:</span> ' . get_post_meta($post->ID, 'expiredate', true) . ' | <span class="meta">Department:</span> ' . get_post_meta($post->ID, 'Department', true) . ' </div>
                        <p>' . get_the_excerpt() . '</p>
                        <a class="red_link" target="_blank" href=" ' . get_the_permalink() . '" /><button class="red" style="margin-right: 10px;"/>Learn More</button></a>
                        <a class="red_link" target="_blank" href="http://gld.la/2GciVF4" /><button class="red"/>Apply Now</button></a>
                        </div>';

    endwhile;
    else return( 'Sorry, there are no jobs available at this time. Check back often! In the meantime, you can fill out a blank application for us to hold on file. <a href="http://gld.la/2GciVF4" target="_blank" />Click here</a>.' );
    wp_reset_query();
    return html_entity_decode($out);
}
add_shortcode( 'locgviewjobs', 'locg_view_jobs');
1

Try adding 'posts_per_page' => -1, to your default atts. This will make the query return all of the posts instead of limiting it. Also you're overriding $out each loop instead of adding to it. Change $out = '<div class to $out .= '<div class

  • Thanks for the suggestion - unfortunately, made no difference. – tommycopeland Apr 8 at 15:47
  • 1
    found it. you're overriding your output each time you loop through a post instead of adding to it. I'll add the fix to my answer. – mrben522 Apr 8 at 16:33
  • Yup, your second fix did the trick. What's the significance of that period there? Just curious... – tommycopeland Apr 8 at 20:01
  • .= adds to the existing variable, = sets the variable to a new value. – mrben522 Apr 8 at 23:13
0

Try this

function locg_view_jobs($atts) {
    $atts = shortcode_atts(
                array( //default values
                'post_type' => 'locg_jobs',
                'post_status' => 'publish',
                ), 
                $atts, 'locgviewjobs' );

    global $post;

    $posts = new WP_query($atts);
    $out = '';

    $terms = get_the_terms( get_the_ID(), 'job_cat');

    foreach ($terms as $term) { 
         $job_cat_links[]=$term->name;
    }

    $job_cat_go = join(",", $job_cat_links);

        if ($posts->have_posts())
            while ($posts->have_posts()):
                $posts->the_post();
                $out .= '<div class="job_post"><h4><a href=" ' . get_the_permalink() . '" title="Apply Now" />' . get_the_title() . '</a></h4>
                        <div class="jobs_meta">
                        <span class="meta">Posted Date:</span> ' . get_the_date() . '</span> | <span class="meta">Open Until:</span> ' . get_post_meta($post->ID, 'expiredate', true) . ' | <span class="meta">Department:</span> ' . get_post_meta($post->ID, 'Department', true) . ' </div>
                        <p>' . get_the_excerpt() . '</p>
                        <a class="red_link" target="_blank" href=" ' . get_the_permalink() . '" /><button class="red" style="margin-right: 10px;"/>Learn More</button></a>
                        <a class="red_link" target="_blank" href="http://gld.la/2GciVF4" /><button class="red"/>Apply Now</button></a>
                        </div>';

    endwhile;
    else return( 'Sorry, there are no jobs available at this time. Check back often! In the meantime, you can fill out a blank application for us to hold on file. <a href="http://gld.la/2GciVF4" target="_blank" />Click here</a>.' );
    wp_reset_query();
    return html_entity_decode($out);
}
add_shortcode( 'locgviewjobs', 'locg_view_jobs');
  • 1
    Thank you - the solution above yours worked for me! – tommycopeland Apr 8 at 20:02
  • Glad to know that it worked. Please mark this as Accepted Answer to help other searching for similar problem. Thanks – Qaisar Feroz Apr 9 at 3:33

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.