Home › Forums › General Issues › Shortening the output of a text field for display
Hello,
I have a text area field on a custom post type called ‘news.’ In my template file, I’m pulling the title, the date, and some other data from the post and displaying it. The problem comes when I try to shorten the content of the post to a more manageable size. I could force a restriction in ACF when they input the text, but I need it all for the full post. Here’s what I’ve got right now:
<?php
$args = array(
'posts_per_page' => 1,
'post_type' => 'news'
);
// get results
$the_query = new WP_Query( $args );
// The Loop
?>
<div>
<?php while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
<?php $url = get_field('external_link');?>
<?php if( $url ): ?>
<h4>
<a href="<?php echo $url ?>">
<?php the_title(); ?>
</a>
</h4>
<?php else: ?>
<h4>
<?php the_title(); ?>
</h4>
<?php endif; ?>
<p style="font-size:14;font-weight:300;">
<?php
$date = DateTime::createFromFormat('Ymd', get_field('date'));
echo $date->format('m-d-Y');
?>,
<?php the_field('pub_name'); ?>
</p><small>
<?php
$descr = the_field('description');
$descr = strip_tags($descr);
echo substr($descr, 0, 135); // pull only x amount of characters from the content
?>… </small>
<?php endwhile; ?>
</div>
<?php wp_reset_query(); // Restore global post data stomped by the_post(). ?>
The title is working, the date is working, and the pub_name is working. If I pull the ‘description’ field (starting with the $descr = the_field(‘description’) line), I cannot shorten it at all. The code above just outputs the entire thing, not the first 135 characters as I specified.
The only thing I could think of is that if I echo the data type of the $descr variable, it comes out as ‘NULL’. I converted it to a string as a test, and that didn’t do any good. I’ve been wrestling with this for a couple of hours now and for the life of me, I can’t get the description to come out shorter than the full length. I searched the forums and found someone else using substr() and saying that it worked… I’m out of ideas.
Thank you in advance
I kind of solved it:
<small>
<?php
$key_1_value = get_post_meta( get_the_ID(), 'description', true );
$key_1_value = strip_tags($key_1_value);
echo substr($key_1_value, 0, 130); // pull only x amount of characters from the content
?>… </small>
If I use “get_post_meta”, it works just fine. The issue seems to be with using the_field() for some reason.
You must be logged in to reply to this topic.
Welcome to the Advanced Custom Fields community forum.
Browse through ideas, snippets of code, questions and answers between fellow ACF users
Helping others is a great way to earn karma, gain badges and help ACF development!
Accordions are a great way to group related information while allowing users to interactively show and hide content. In this video, Damon Cook goes in-depth on how to create an accessible accordion block using ACF PRO’s Repeater field.https://t.co/RXT0g25akN
— Advanced Custom Fields (@wp_acf) March 2, 2023
© 2023 Advanced Custom Fields.
We use cookies to offer you a better browsing experience, analyze site traffic and personalize content. Read about how we use cookies and how you can control them in our Cookie Policy. If you continue to use this site, you consent to our use of cookies.