I'm writing a simple SEO class that will add the various metatag to the header of wordpress.
I've two little problems with the wordpress api.
The first is that I need to remove the last comma from the tag list, I've tried with rtrim
but without success.
The secont problem is that I'm unable to load the content of the post or page to create the content of the description meta tag. How I can fix these two issues?
<?php
/*
* Plugin Name: Custom Meta Tag
*/
class WP_Custom_Meta_Tag{
private $post_tags;
private $key;
private $keyword;
private $description;
public function init(){
add_action('wp_head', array($this, 'add_meta_description'));
add_action('wp_head', array($this, 'add_meta_keywords'));
}
/*
* metatag keywords
*/
public function add_meta_keywords(){
if( is_single() ){
$post_tags = get_the_tags( $post->ID );
$key = '';
foreach( $post_tags as $keyword ){
$key .= $keyword->name.', ';
}
echo '<meta name="keywords" content="'.$key.'">';
}
}
/*
* metatag description
*/
public function add_meta_description(){
if( is_single() ){
#$description = strip_tags( $post->post_content );
$d = get_the_content( $post->ID );
#$description = strip_shortcodes( $post->post_content );
#$description = str_replace( array("\n", "\r", "\t"), ' ', $description );
#$description = substr( $description, 0, 125 );
#echo '<meta name="description" content="'. $description .'">';
var_dump($d);
}
}
}
$meta = new WP_Custom_Meta_Tag;
$meta->init();
?>
EDIT
I've fixed the issue, and now all seems to work correctly. If anyone has a suggestion to better trim the description text, please share an answer. I've read about wp_trim_words
, but it will not work.
Here is the updated code:
class WP_Custom_Meta_Tag{
private $post_tags;
private $key;
private $keyword;
private $description;
public function init(){
add_action('wp_head', array($this, 'add_metatags'), 1);
}
/*
* metatag keywords
*/
public function add_metatags(){
global $post;
if( is_single() || is_page() ){
$post_tags = get_the_tags( $post->ID );
$key = [];
foreach( $post_tags as $keyword ){
$key[] = $keyword->name;
}
// this part needs to be improved
$description = strip_tags( $post->post_content );
$description = strip_shortcodes( $post->post_content );
$description = str_replace( array("\n", "\r", "\t"), ' ', $description );
$description = substr( $description, 0, 140 );
echo '<meta name="description" content="'. $description .'" />';
echo '<meta name="keywords" content="'.implode(',' ,$key).'" />';
echo '<meta property="og:title" content="'. get_the_title( $post->ID ) .'" />';
echo '<meta property="og:description" content="'. $description .'"/>';
#echo '<meta property="og:type" content="" />';
echo '<meta property="og:url" content="'. get_the_permalink( $post->ID ) .'" />';
if( has_post_thumbnail() ){
echo '<meta property="og:image" content="'. get_the_post_thumbnail_url( $post->ID , 'full') .'" />';
}
}
}
}
$meta = new WP_Custom_Meta_Tag;
$meta->init();
?>
I'm writing a simple SEO class that will add the various metatag to the header of wordpress.
I've two little problems with the wordpress api.
The first is that I need to remove the last comma from the tag list, I've tried with rtrim
but without success.
The secont problem is that I'm unable to load the content of the post or page to create the content of the description meta tag. How I can fix these two issues?
<?php
/*
* Plugin Name: Custom Meta Tag
*/
class WP_Custom_Meta_Tag{
private $post_tags;
private $key;
private $keyword;
private $description;
public function init(){
add_action('wp_head', array($this, 'add_meta_description'));
add_action('wp_head', array($this, 'add_meta_keywords'));
}
/*
* metatag keywords
*/
public function add_meta_keywords(){
if( is_single() ){
$post_tags = get_the_tags( $post->ID );
$key = '';
foreach( $post_tags as $keyword ){
$key .= $keyword->name.', ';
}
echo '<meta name="keywords" content="'.$key.'">';
}
}
/*
* metatag description
*/
public function add_meta_description(){
if( is_single() ){
#$description = strip_tags( $post->post_content );
$d = get_the_content( $post->ID );
#$description = strip_shortcodes( $post->post_content );
#$description = str_replace( array("\n", "\r", "\t"), ' ', $description );
#$description = substr( $description, 0, 125 );
#echo '<meta name="description" content="'. $description .'">';
var_dump($d);
}
}
}
$meta = new WP_Custom_Meta_Tag;
$meta->init();
?>
EDIT
I've fixed the issue, and now all seems to work correctly. If anyone has a suggestion to better trim the description text, please share an answer. I've read about wp_trim_words
, but it will not work.
Here is the updated code:
class WP_Custom_Meta_Tag{
private $post_tags;
private $key;
private $keyword;
private $description;
public function init(){
add_action('wp_head', array($this, 'add_metatags'), 1);
}
/*
* metatag keywords
*/
public function add_metatags(){
global $post;
if( is_single() || is_page() ){
$post_tags = get_the_tags( $post->ID );
$key = [];
foreach( $post_tags as $keyword ){
$key[] = $keyword->name;
}
// this part needs to be improved
$description = strip_tags( $post->post_content );
$description = strip_shortcodes( $post->post_content );
$description = str_replace( array("\n", "\r", "\t"), ' ', $description );
$description = substr( $description, 0, 140 );
echo '<meta name="description" content="'. $description .'" />';
echo '<meta name="keywords" content="'.implode(',' ,$key).'" />';
echo '<meta property="og:title" content="'. get_the_title( $post->ID ) .'" />';
echo '<meta property="og:description" content="'. $description .'"/>';
#echo '<meta property="og:type" content="" />';
echo '<meta property="og:url" content="'. get_the_permalink( $post->ID ) .'" />';
if( has_post_thumbnail() ){
echo '<meta property="og:image" content="'. get_the_post_thumbnail_url( $post->ID , 'full') .'" />';
}
}
}
}
$meta = new WP_Custom_Meta_Tag;
$meta->init();
?>
I need to remove the last comma from the tag list
Put all $keyword->name
into an array and use implode()
to get the result.
I'm unable to load the content of the post or page
Object $post
is not available in your function. Use global $post;
to access $post->ID
and $post->post_content
etc.
So,
public function add_meta_keywords(){
if( is_single() ){
$post_tags = get_the_tags( $post->ID );
$key = '';
foreach( $post_tags as $keyword ){
$key .= $keyword->name.', ';
}
echo '<meta name="keywords" content="'.$key.'">';
}
}
should be something like this
public function add_meta_keywords(){
if( is_single() ){
global $post;
$post_tags = get_the_tags( $post->ID );
$key = array();
foreach( $post_tags as $keyword ){
$key []= $keyword->name;
}
echo '<meta name="keywords" content="'.implode(', ',$key).'">';
}
}
And
public function add_meta_description(){
if( is_single() ){
#$description = strip_tags( $post->post_content );
$d = get_the_content( $post->ID );
#$description = strip_shortcodes( $post->post_content );
#$description = str_replace( array("\n", "\r", "\t"), ' ', $description );
#$description = substr( $description, 0, 125 );
#echo '<meta name="description" content="'. $description .'">';
var_dump($d);
}
}
should be
public function add_meta_description(){
global $post;
if( is_single() ){
global $post;
#$description = strip_tags( $post->post_content );
$d = get_the_content( $post->ID );
#$description = strip_shortcodes( $post->post_content );
#$description = str_replace( array("\n", "\r", "\t"), ' ', $description );
#$description = substr( $description, 0, 125 );
#echo '<meta name="description" content="'. $description .'">';
var_dump($d);
}
}
EDIT:
Better solution to trim the description to 140 characters.
TRY this
// Checks the content's length, if more 140 chars...
// Output 140 chars, but don't break a word
if ( strlen($description) > 140){
$description = substr($description, 0, strpos($description, ' ', 140));
}
echo '<meta name="description" content="'. $description .'">';
I hope this helps.