I want a shortcode that can retrieve the comment count from a page by its page slug.
Example: [comment-count page="page-slug"]
The following code does it by page ID:
function comments_shortcode($atts) {
extract( shortcode_atts( array(
'id' => ''
), $atts ) );
$num = 0;
$post_id = $id;
$queried_post = get_post($post_id);
$cc = $queried_post->comment_count;
if( $cc == $num || $cc > 1 ) : $cc = $cc.' Comments';
else : $cc = $cc.' Comment';
endif;
$permalink = get_permalink($post_id);
return '<a href="'. $permalink . '" class="comments_link">' . $cc . '</a>';
}
add_shortcode('comments', 'comments_shortcode');
Hariprasad Vijayan answers:
Try this,
function comments_shortcode($atts)
{
extract(shortcode_atts(array(
'page' => ''
), $atts));
$page_details = get_page_by_path( $page );
$num = 0;
$post_id = $page_details->ID;
$queried_post = get_post($post_id);
$cc = $queried_post->comment_count;
if ($cc == $num || $cc > 1) : $cc = $cc.' Comments'; else : $cc = $cc.' Comment';
endif;
$permalink = get_permalink($post_id);
return '<a href="'. $permalink . '" class="comments_link">' . $cc . '</a>';
}
add_shortcode('comment_count', 'comments_shortcode');
You can add shortcode like this
[comment_count page="page-slug"]
Jayaram Y comments:
Please try this
function comments_count_func($atts) {
extract(shortcode_atts(array(
'page' => '',
), $atts));
$args = [
'post_name__in' => [$page],
'fields' => 'ids'
];
$q = get_posts( $args );
$num = 0;
$post_id = $q[0];
$queried_post = get_post($post_id);
$cc = $queried_post->comment_count;
if( $cc == $num || $cc > 1 ) : $cc = $cc.' Comments';
else : $cc = $cc.' Comment';
endif;
$permalink = get_permalink($post_id);
return '<a href="'. $permalink . '" class="comments_link">' . $cc . '</a>';
}
add_shortcode('comments-count', 'comments_count_func');
And use this as shortcode
[comments-count page=”page-slug-here”]
Jayaram Y comments:
I have tested this and its working for me.
Sorry, I have added this as a comment to another answer. I have posted the same as another answer. Please check.
Farid answers:
Hi,
You can get a page as the object by its slug. After that you can get its ID from the object easily.
For example, for a page with 'about' slug you can do the follwoing:
$page = get_page_by_path( 'about' );
Thanks
Glenton Samuels comments:
I need it as a shortcode specifically.
Farid comments:
Plesae replace your complete code with the following code:
function comments_shortcode($atts) {
extract( shortcode_atts( array(
'slug' => ''
), $atts ) );
$num = 0;
$page = get_page_by_path( $slug );
$post_id = $page->ID;
$queried_post = get_post($post_id);
$cc = $queried_post->comment_count;
if( $cc == $num || $cc > 1 ) : $cc = $cc.' Comments';
else : $cc = $cc.' Comment';
endif;
$permalink = get_permalink($post_id);
return '<a href="'. $permalink . '" class="comments_link">' . $cc . '</a>';
}
add_shortcode('comments', 'comments_shortcode');
Then use the following shortcode with any page slug as slug argument. I used about page slug in the example:
[comments slug="about"]
Thanks
Fahad Murtaza answers:
function comments_shortcode( $atts ) {
extract( shortcode_atts( array( 'slug' => '' ), $atts ) );
$queried_post = get_page_by_path( $slug );
$cc = $queried_post->comment_count;
$cc = $cc > 1 ? $cc . ' Comments' : $cc . ' Comment';
$permalink = get_permalink( $queried_post->ID );
return '<a href="' . $permalink . '" class="comments_link">' . $cc . '</a>';
}
add_shortcode( 'comments', 'comments_shortcode' );
I have refactored a bit for clean code. Better formatted code at: https://gist.github.com/fahdi/73e7bcc107b82e5c66a63ddaf6d7463c
Jayaram Y answers:
Please try this
function comments_count_func($atts) {
extract(shortcode_atts(array(
'page' => '',
), $atts));
$args = [
'post_name__in' => [$page],
'fields' => 'ids'
];
$q = get_posts( $args );
$num = 0;
$post_id = $q[0];
$queried_post = get_post($post_id);
$cc = $queried_post->comment_count;
if( $cc == $num || $cc > 1 ) : $cc = $cc.' Comments';
else : $cc = $cc.' Comment';
endif;
$permalink = get_permalink($post_id);
return '<a href="'. $permalink . '" class="comments_link">' . $cc . '</a>';
}
add_shortcode('comments-count', 'comments_count_func');
And use this as shortcode
[comments-count page=”page-slug-here”]