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');

2 Answers 2

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

5
  • Thanks for the suggestion - unfortunately, made no difference. Apr 8, 2019 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, 2019 at 16:33
  • Yup, your second fix did the trick. What's the significance of that period there? Just curious... Apr 8, 2019 at 20:01
  • .= adds to the existing variable, = sets the variable to a new value.
    – mrben522
    Apr 8, 2019 at 23:13
  • w3schools.com/php/php_operators.asp
    – mrben522
    Apr 8, 2019 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');
2
  • 1
    Thank you - the solution above yours worked for me! Apr 8, 2019 at 20:02
  • Glad to know that it worked. Please mark this as Accepted Answer to help other searching for similar problem. Thanks Apr 9, 2019 at 3:33

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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