I am having issues with my code for featured posts. Here what it does:
1. If has featured image > Show
2. If doesnt > Show first image in post (also need to delete first image in post)
3. If no image in post and no featured image > default.jpg
What i need is to <strong>delete the first image in the post</strong> so it does not repeat (#2). Any ideas?
Here is function:
function get_fbimage() {
if ((function_exists('has_post_thumbnail')) && (has_post_thumbnail())) {
$src = wp_get_attachment_image_src( get_post_thumbnail_id($post->ID), '', '' );
$fbimage = $src[0];
} else {
global $post, $posts;
$fbimage = '';
$output = preg_match_all('/<img.+src=[\'"]([^\'"]+)[\'"].*>/i',
$post->post_content, $matches);
$fbimage = $matches [1] [0];
}
if(empty($fbimage)) {
$fbimage = "http://www.example.com/defualt.jpg";
}
return $fbimage;
}
Here is the php
<?php if ( function_exists( 'has_post_thumbnail') && (has_post_thumbnail()) ) :
echo get_the_post_thumbnail($post->ID);
else :?>
<img src="<?php echo get_fbimage();?>" />
<?php endif;?>
Arnav Joy answers:
try this
<?php
function get_fbimage() {
if ((function_exists('has_post_thumbnail')) && (has_post_thumbnail())) {
$src = wp_get_attachment_image_src( get_post_thumbnail_id($post->ID), '', '' );
$fbimage = $src[0];
} else {
global $post, $posts;
add_filter('the_content', 'remove_first_image');
$fbimage = '';
$output = preg_match_all('/<img.+src=[\'"]([^\'"]+)[\'"].*>/i',
$post->post_content, $matches);
$fbimage = $matches [1] [0];
}
if(empty($fbimage)) {
$fbimage = "http://www.example.com/defualt.jpg";
}
return $fbimage;
}
function remove_first_image ($content) {
$content = preg_replace("/<img[^>]+\>/i", "", $content, 1);
return $content;
}
Arnav Joy comments:
can you share your code how you are calling content of the post to display?
Arnav Joy comments:
so basically this function will remove the first image , and you can call it via filter
function remove_first_image ($content) {
$content = preg_replace("/<img[^>]+\>/i", "", $content, 1);
return $content;
}
add_filter('the_content', 'remove_first_image');
Casey Spitnale comments:
This actually works with out the
add_filter('the_content', 'remove_first_image');
Because with that all pages loose the first image (that are not blog post with a featured image).
isp_charlie answers:
try this:
function catch_that_image() {
global $post, $posts;
$first_img = '';
ob_start();
ob_end_clean();
$output = preg_match_all('/<img.+src=[\'"]([^\'"]+)[\'"].*>/i', $post->post_content, $matches);
$first_img = $matches[1][0];
if(empty($first_img)) {
$first_img = "/path/to/default.png";
}
return $first_img;
}
to use:
if ( get_the_post_thumbnail($post_id) != '' ) {
echo '<a href="'; the_permalink(); echo '" class="thumbnail-wrapper">';
the_post_thumbnail();
echo '</a>';
} else {
echo '<a href="'; the_permalink(); echo '" class="thumbnail-wrapper">';
echo '<img src="';
echo catch_that_image();
echo '" alt="" />';
echo '</a>';
}
Casey Spitnale comments:
It's still duplicated.