ओवर 2 years ago I published an article on how to fix problems with WordPress themes which didn’t pass the Google Rich Snippets Testing Tool. वर्डप्रेस और सबसे विषयों बेहतर समर्थन किया है - तब से बहुत से बदल गया है, HTML5 और CSS3 आ चुके हैं, और गूगल, Yahoo and Bing got together and decided to focus on Microdata, schema.org के माध्यम से. समय Microformats पृष्ठों को चिह्नित करने के लिए सबसे आसान तरीका लग रहा था, और परीक्षण उपकरण इन के लिए सबसे व्यापक समर्थन प्राप्त था. Microdata के लिए कदम और WordPress करने के लिए परिवर्तन एक नया अनुच्छेद आवश्यक: यह बात है!
Instead of having lots of separate articles for different themes I’ve decided to try to provide all the information in 1 मार्गदर्शक. This makes it easier to keep up to date, and means there is just 1 central point for all requests and discussion. It also makes more sense as several of the steps are the same regardless of what theme you are using. I’m not going to cover all the optional extras in this article, just the basics to get your site to validate with the tool. Once you’ve managed that you should find adding extra markup is relatively easy. So lets get started…
Add a link from your google profile to your site
You will see on my google+ profile that I have a public link to https://diymediahome.org — you will need the same for your own site. Ideally you will need all of your authors to have a google profile that is linked to your site in the same way as this.
- Log in to your google profile
- Scroll down until you see the links section somewhere towards the bottom right of the page
- पर क्लिक करें संपादित link
- Under the contributor to section click Add custom link
- Make sure the box to the right of the text contributor to is set to public
- Enter your site name (e.g. DIY मीडिया) and address (e.g. https://diymediahome.org)
- सहेजें पर क्लिक करें
Add a link from your site to your google profile
Now we need to add a link from your author page to your google profile. वहाँ रहे हैं 2 alternative ways to do this, I highly recommend using the Yoast इस प्लगइन.
- स्थापित करें Yoast इस plu जिन OR add the following code to the functions.php file of your theme
function update_contactmethods( $contactmethods ) { // Add Google Profiles $contactmethods['googleplus'] = 'Google+'; // Add Twitter $contactmethods['twitter'] = __( 'Twitter username (without @)', 'wordpress-seo' ); return $contactmethods; } add_filter( 'user_contactmethods', 'update_contactmethods', 10, 1);
- Go to your author profile in the wordpress admin interface (hover over उपयोगकर्ता in the left-hand menu, और पर क्लिक करें आपकी समर्थक फाइल)
- में Google+ field add a link to your google profile (e.g. https://plus.google.com/104657888470728381512/)
- Make sure either you, or your other site authors do the same thing, and each link to your own google profiles
- अब, if you’re using the Yoast plugin, करने के लिए जाना इस menu and select Titles and Metas, सीlick on the Home menu at the top of the page and in the Author highlighting pulldown box select the user you want to use as the author of the homepage
- If you’re insistent about not using the Yoast plugin you will need to manually add the following code to header.php (assuming you have one). Don’t forget to change my google profile url to yours. This code will use the post author’s google profile url if there is a valid one, and will use a default (yours) if there isn’t.
<लिंक rel ="लेखक" href ="<?php $gplus = 'https://plus.google.com/115369062315673853712/posts'; अगर ( is_singular() ) {global $post; $gplus = get_the_author_meta( 'googleplus', $post->post_author );} echo $gplus; ?>"/>
Fix errors of a missing “updated” field
Most wordpress themes include information about when the post was published in the post information area, but very few also include when it was last updated. This is a pity, because updated is required whereas published actually isn’t! Adding it is easy though, and again, वहाँ रहे हैं 2 ways, the proper way and the quick hack way. I recommend the proper way of course, but if necessary you can resort to the quick hack. We’re also going to change from microformats to microdata at the same time.
The proper way
We’re going to add some additional information to post headers, both for search engines and for our visitors. We will need to do this for posts, पृष्ठों, archives and the homepage.
- We need to find the file that contains the code which generates the published link. This will almost certainly use the wordpress function get_the_date(). You can search through your theme files, or refer to theme specific details below where I have provided details for lots of themes
- We are going to check if the published and updated dates are the same. If they are we will just add the extra dateUpdated itemprop but if they are different we will output some extra text to the visitor
- We’re going to add the following (and modify it as it explains)
<?php if(get_the_date()==get_the_modified_date()): ?> //we're going to use the original code just with the updated class added //put your theme's original code here //remove any class="" //add itemprop="datePublished dateCreated dateModified" to the एचटीएमएल tag surrounding the get_the_date() समारोह <?php else: ?> //we're going to use slightly code just with the updated date added //copy your theme's original code to here and then modify it as below //remove any class="" //add itemprop="datePublished dateCreated" to the एचटीएमएल tag surrounding the get_the_date() function //add in a new html tag into the line where you want it to appear as below //Updated <?php echo get_the_modified_date() ?> <?php endif; ?>
- You’ll either have to figure out the original theme’s code and edit it, or refer to the details for specific themes below.
- You may have to repeat this edit for multiple files
The quick hack
We’re going to cheat and supply the published date as the updated date, even if the post has actually been updated more recently. If the post has been updated then we’ll actually be supplying incorrect information, but it will still validate. It really is better to do it properly if possible, but if you’re insistent on doing it this way read on. As above we will need to do this for posts, पृष्ठों, archives and the homepage.
- As above we need to find the file that contains the code which generates the published link. This will almost certainly use the wordpress function get_the_date(). You can search through your theme files, or refer to the table below where I have provided details for lots of themes
- Find the एचटीएमएल element that surrounds the date (often it will have
class="published"
). - Edit the element by removing the class and adding the following instead
itemprop="datePublished dateCreated dateUpdated"
- As above, you may need to repeat this edit in multiple files
Replacing the built-in microformats (because mixing rich snippet formats breaks things)
By default wordpress is still using microformat markup for comments, which sadly seems to break microdata markup of things like recipes. The best way to fix this is to remove the microformat markup and replace it with microdata markup. दुर्भाग्य से, the wordpress core functions that produce this markup don’t have a conveniently located filter or hook so this requires a bit of tinkering about.
Replacing vcard in the comments section
- What we’re going to do is use a comment callback to change the output of comments. Many themes already use a callback which we can modify, and for those that don’t we’ll add one based on the wordpress default
- Check if you theme already has a comment callback — search your theme files for the function
wp_list_comments
. If it includes the codecallback=
या'callback' =>
then it is using a callback which you should be able to find (probably in functions.php) by looking for the name of the callback function, which is the part after the = sign or arrow, e.g.wp_list_comments( array( 'callback' => 'twentyten_comment' ) );
याwp_list_comments('type=comment&callback=bones_comments');
. If it doesn’t then we will need to add one by addingcallback=diymh_comment
याarray( 'callback' => 'diymh_comment' )
to the line. - If you needed to add a comment callback then you will need to add the following code to functions.php
function diymh_comment($टिप्पणी, $आर्ग, $depth) { $GLOBALS['टिप्पणी'] = $comment; ?> <कि <?php comment_class(); ?> id="li-comment-<?php comment_ID() ?>"> <div id ="comment-<?php comment_ID(); ?>"> <div class ="comment-author novcard"> <?php echo get_avatar($टिप्पणी,$size='48',$default='<path_to_url>' ); ?> <?php printf(__('<cite class="fn">%एस</cite> <span class ="says">says:</विस्तार>'), get_comment_author_link()) ?> </div> <?php if ($comment->comment_approved == '0') : ?> <em><?php _e('Your comment is awaiting moderation.') ?></em> </ br> <?php endif; ?> <div class ="comment-meta commentmetadata"><एक href ="<?php echo htmlspecialchars( get_comment_link( $comment->comment_ID ) ) ?>"><?php printf(__('%1$s at %2$s'), get_comment_date(), get_comment_time()) ?></ए><?php edit_comment_link(__('(संपादित करें)'),' ','') ?></div> <?php comment_text() ?> <div class ="reply"> <?php comment_reply_link(array_merge( $आर्ग, सरणी('depth' => $depth, 'max_depth' => $आर्ग['max_depth']))) ?> </div> </div> <?PHP }
- You will notice that this code has a
class="novcard"
instead of the originalclass="vcard".
- If your theme did have its own callback you need to find the callback function and replace any instances of
class="vcard"
साथclass="novcard"
Replacing hfeed in the header
- आगामी, we need to also remove any instances of
class="hfeed"
, which are usually found in header.php. Replace all occurrences ofhfeed
साथnohfeed
Replacing hentry and title rich snippets
- We can replace these elements with a couple of neat functions added to functions.php
function diymh_replace_hentry($classes){ अगर(($key = array_search('hentry', $classes)) !== false) $classes[$कुंजी]='nohentry'; return $classes; } add_filter('post_class','diymh_replace_hentry'); function diymh_microdata_title($शीर्षक) { वापसी '<span itemprop="नाम">'.$title.'</विस्तार>'; } add_filter('the_title', 'diymh_microdata_title', 10, 2);
Adding the information type (e.g. Article, Recipe, आदि) to the article header
- प्रथम, decide what type of work you are publishing — most likely an article. Have a look at the list at schema.org
- Find the एचटीएमएल tag which contains the function
post_class()
- Add the code
itemscope itemtype="https://schema.org/Article"
(replace article if you picked a different type of work)
अंत में, to avoid breaking any styles
- You will need to edit your theme’s style.css and do a search/replace operation to replace all instances of
.vcard
साथ.novcard
and replace all instances of.hfeed
साथ.nohfeed
so that our changes don’t mess up any सीएसएस styling of our comments
Fixing any other errors
Any other changes necessary will be detailed on a per theme basis below. If you have a theme which you are unable to fix please post a comment. If its a free theme please let me know the theme name, and if it is a premium theme please let me know so I can provide you with an e‑mail address to send a zipped copy to.
Theme specific details
Before just carrying out these edits don’t forget to carry out the steps to link your google profile and your site to each other, and install Yoast इस, or add the code provides above.
Twenty Ten 1.5
In functions.php replace this
function twentyten_posted_on() { printf( __( '<span class ="%1$एस">Posted on</विस्तार> %2$एस <span class ="meta-sep">by</विस्तार> %3$s', 'twentyten' ), 'meta-prep meta-prep-author', sprintf( '<एक href ="%1$एस" title ="%2$एस" rel="bookmark"><span class ="entry-date">%3$एस</विस्तार></ए>', get_permalink(), esc_attr( get_the_time() ), get_the_date() ), sprintf( '<span class ="author vcard"><a class="url fn n" href ="%1$एस" title ="%2$एस">%3$एस</ए></विस्तार>', get_author_posts_url( get_the_author_meta( 'ID' ) ), esc_attr( sprintf( __( 'View all posts by %s', 'twentyten' ), get_the_author() ) ), get_the_author() ) ); }
With this
function twentyten_posted_on() { अगर(get_the_date()==get_the_modified_date()){ printf( __( '<span class ="%1$एस">Posted on</विस्तार> %2$एस <span class ="meta-sep">by</विस्तार> %3$s', 'twentyten' ), 'meta-prep meta-prep-author', sprintf( '<एक href ="%1$एस" title ="%2$एस" rel="bookmark"><span itemprop="datePublished dateCreated dateModified">%3$एस</विस्तार></ए>', get_permalink(), esc_attr( get_the_time() ), get_the_date() ), sprintf( '<span class ="author vcard"><a itemprop="लेखक" href ="%1$एस" title ="%2$एस">%3$एस</ए></विस्तार>', get_author_posts_url( get_the_author_meta( 'ID' ) ), esc_attr( sprintf( __( 'View all posts by %s', 'twentyten' ), get_the_author() ) ), get_the_author() ) ); } अन्य{ printf( __( '<span class ="%1$एस">Posted on</विस्तार> %2$एस <span class ="meta-sep">by</विस्तार> %3$एस. Updated <span itemprop="dateModified">%4$एस</विस्तार>.', 'twentyten' ), 'meta-prep meta-prep-author', sprintf( '<एक href ="%1$एस" title ="%2$एस" rel="bookmark"><span itemprop="datePublished dateCreated">%3$एस</विस्तार></ए>', get_permalink(), esc_attr( get_the_time() ), get_the_date() ), sprintf( '<span class ="author vcard"><a itemprop="लेखक" href ="%1$एस" title ="%2$एस">%3$एस</ए></विस्तार>', get_author_posts_url( get_the_author_meta( 'ID' ) ), esc_attr( sprintf( __( 'View all posts by %s', 'twentyten' ), get_the_author() ) ), get_the_author() ), get_the_modified_date() ); } }
In functions.php replace this
<div class ="comment-author vcard">
With this
<div class ="comment-author novcard">
In header.php replace this
<div id ="wrapper" वर्ग ="hfeed">
With this
<div id ="wrapper" वर्ग ="nohfeed">
In loop.php (3 उदाहरणों), loop-single.php, loop-page.php and loop-attachment.php replace this
<div id ="post-<?php the_ID(); ?>" <?php post_class(); ?>>
With this
<div id ="post-<?php the_ID(); ?>" <?php post_class(); ?> itemscope itemtype="https://schema.org/Article">
Twenty Eleven 1.5
coming very soon…
Annotum Base 1.1.1
में 7 फाइलें (functions\features-articles.php, excerpt\type-article.php, excerpt\excerpt-default.php, content\type-article.php, content\page.php, content\content-default.php, content\article-pdf.php) replace
<article <?php post_class('article-full'); ?>>
साथ
<article <?php post_class('article-full'); ?> itemscope itemtype="https://schema.org/Article">
Thanks — working on it — eisenberg.co.za
महान, grazie mille!