Bedingt hinzufügen apt. Öffnen Sie Graph-Metadaten zu verschiedenen Seiten auf der WordPress-Website

Das offizielle Facebook– Plugin leistet hervorragende Arbeit, um passende Open Graph Metatags zu verschiedenen Seiten (Home, Posts, Seiten, Archive, etc.) einer WordPress-Seite hinzuzufügen.

Das Problem ist, dass es viele Dinge ohne meine Erlaubnis macht. Gibt es eine Möglichkeit, die functionen zum Hinzufügen von Open Graph-Metadaten aus dem Plugin zu bekommen, damit ich sie zur functions.php meines Themes hinzufügen kann?

Solutions Collecting From Web of "Bedingt hinzufügen apt. Öffnen Sie Graph-Metadaten zu verschiedenen Seiten auf der WordPress-Website"

Die Datei fb-open-graph.php (Datei der letzten Version) direkt im extrahierten Ordner des Plugins ist (allein) verantwortlich für das Hinzufügen von Open Graph-Metadaten zum Header Ihrer Site.

Im Folgenden habe ich den Code in der Datei so geändert, dass er zur functions.php Ihres Themas hinzugefügt werden kann:

 /* Facebook Open Graph Markup In Header * from /facebook/fb-open-graph.php file */ function fb_output_og_protocol( $property, $content ) { if ( empty( $property ) || empty( $content ) ) return; // array of property values or structured property if ( is_array( $content ) ) { foreach( $content as $structured_property => $content_value ) { // handle numeric keys from regular arrays // account for the special structured property of url which is equivalent to the root tag and sets up the structure if ( ! is_string( $structured_property ) || $structured_property === 'url' ) fb_output_og_protocol( $property, $content_value ); else fb_output_og_protocol( $property . ':' . $structured_property, $content_value ); } } else { echo "\n"; } } /* Add Open Graph protocol markup to  */ function fb_add_og_protocol() { global $post; $meta_tags = array( 'http://ogp.me/ns#locale' => get_locale(), 'http://ogp.me/ns#site_name' => get_bloginfo( 'name' ), 'http://ogp.me/ns#type' => 'website' ); if ( is_home() || is_front_page() ) { $meta_tags['http://ogp.me/ns#title'] = get_bloginfo( 'name' ); $meta_tags['http://ogp.me/ns#description'] = get_bloginfo( 'description' ); } else if ( is_single() ) { $post_type = get_post_type(); $meta_tags['http://ogp.me/ns#type'] = 'article'; $meta_tags['http://ogp.me/ns#url'] = apply_filters( 'rel_canonical', get_permalink() ); if ( post_type_supports( $post_type, 'title' ) ) $meta_tags['http://ogp.me/ns#title'] = get_the_title(); if ( post_type_supports( $post_type, 'excerpt' ) ) { // thanks to Angelo Mandato (http://wordpress.org/support/topic/plugin-facebook-plugin-conflicts-with-powerpress?replies=16) // Strip and format the wordpress way, but don't apply any other filters which adds junk that ends up getitng stripped back out if ( !post_password_required($post) ) { // First lets get the post excerpt (shouldn't have any html, but anyone can enter anything...) $desc_no_html = $post->post_excerpt; if ( !empty($excerpt_no_html) ) { $desc_no_html = strip_shortcodes($desc_no_html); // Strip shortcodes first in case there is HTML inside the shortcode $desc_no_html = wp_strip_all_tags($desc_no_html); // Strip all html $desc_no_html = trim($desc_no_html); // Trim the final string, we may have stripped everything out of the post so this will make the value empty if that's the case } // Recheck if empty, may be that the strip functions above made excerpt empty, doubhtful but we want to be 100% sure. if( empty($desc_no_html) ) { $desc_no_html = $post->post_content; // Start over, this time with the post_content $desc_no_html = strip_shortcodes( $desc_no_html ); // Strip shortcodes first in case there is HTML inside the shortcode $desc_no_html = str_replace(']]>', ']]>', $desc_no_html); // Angelo Recommendation, if for some reason ]]> happens to be in the_content, rare but We've seen it happen $desc_no_html = wp_strip_all_tags($desc_no_html); $excerpt_length = apply_filters('excerpt_length', 55); $desc_no_html = wp_trim_words( $desc_no_html, $excerpt_length ); $desc_no_html = trim($desc_no_html); // Trim the final string, we may have stripped everything out of the post so this will make the value empty if that's the case } $desc_no_html = str_replace( array( "\r\n", "\r", "\n" ), ' ',$desc_no_html); // I take it Facebook doesn't like new lines? $meta_tags['http://ogp.me/ns#description'] = $desc_no_html; } } $meta_tags['http://ogp.me/ns/article#published_time'] = get_the_date('c'); $meta_tags['http://ogp.me/ns/article#modified_time'] = get_the_modified_date('c'); if ( post_type_supports( $post_type, 'author' ) && isset( $post->post_author ) ) $meta_tags['http://ogp.me/ns/article#author'] = get_author_posts_url( $post->post_author ); // add the first category as a section. all other categories as tags $cat_ids = get_the_category(); if ( ! empty( $cat_ids ) ) { $cat = get_category( $cat_ids[0] ); if ( ! empty( $cat ) ) $meta_tags['http://ogp.me/ns/article#section'] = $cat->name; //output the rest of the categories as tags unset( $cat_ids[0] ); if ( ! empty( $cat_ids ) ) { $meta_tags['http://ogp.me/ns/article#tag'] = array(); foreach( $cat_ids as $cat_id ) { $cat = get_category( $cat_id ); $meta_tags['http://ogp.me/ns/article#tag'][] = $cat->name; unset( $cat ); } } } // add tags. treat tags as lower priority than multiple categories $tags = get_the_tags(); if ( $tags ) { if ( ! array_key_exists( 'http://ogp.me/ns/article#tag', $meta_tags ) ) $meta_tags['http://ogp.me/ns/article#tag'] = array(); foreach ( $tags as $tag ) { $meta_tags['http://ogp.me/ns/article#tag'][] = $tag->name; } } // does current post type and the current theme support post thumbnails? if ( post_type_supports( $post_type, 'thumbnail' ) && function_exists( 'has_post_thumbnail' ) && has_post_thumbnail() ) { list( $post_thumbnail_url, $post_thumbnail_width, $post_thumbnail_height ) = wp_get_attachment_image_src( get_post_thumbnail_id( $post->ID ), 'full' ); if ( ! empty( $post_thumbnail_url ) ) { $image = array( 'url' => $post_thumbnail_url ); if ( ! empty( $post_thumbnail_width ) ) $image['width'] = absint( $post_thumbnail_width ); if ( ! empty($post_thumbnail_height) ) $image['height'] = absint( $post_thumbnail_height ); $meta_tags['http://ogp.me/ns#image'] = array( $image ); } } } else if ( is_author() && isset( $post->post_author ) ) { $meta_tags['http://ogp.me/ns#type'] = 'profile'; $meta_tags['http://ogp.me/ns/profile#first_name'] = get_the_author_meta( 'first_name', $post->post_author ); $meta_tags['http://ogp.me/ns/profile#last_name'] = get_the_author_meta( 'last_name', $post->post_author ); if ( is_multi_author() ) $meta_tags['http://ogp.me/ns/profile#username'] = get_the_author_meta( 'login', $post->post_author ); } else if ( is_page() ) { $meta_tags['http://ogp.me/ns#type'] = 'article'; $meta_tags['http://ogp.me/ns#title'] = get_the_title(); $meta_tags['http://ogp.me/ns#url'] = apply_filters( 'rel_canonical', get_permalink() ); } $meta_tags['http://ogp.me/ns/fb#app_id'] = 'FACEBOOK APP ID HERE'; $meta_tags = apply_filters( 'fb_meta_tags', $meta_tags, $post ); foreach ( $meta_tags as $property => $content ) { fb_output_og_protocol( $property, $content ); } } add_action( 'wp_head', 'fb_add_og_protocol' ); 

Anmerkungen:

  • Plugin Version verwendet: 1.0.1

  • Stellen Sie sicher, dass das ursprüngliche Plugin selbst deaktiviert ist.

  • Ersetzen Sie fb_get_locale() durch get_locale()

  • Entfernen (LINE 905):

     $excerpt_more = apply_filters('excerpt_more', ' ' . '[...]'); 

    Und ersetzen (LINE 906):

     $desc_no_html = wp_trim_words( $desc_no_html, $excerpt_length, $excerpt_more ); 

    Mit diesem:

     $desc_no_html = wp_trim_words( $desc_no_html, $excerpt_length ); 

    Dies behebt einen Fehler im Plugin, aufgrund dessen es codiertes HTML im Og og:description Meta-Tag herausspritzt ( siehe Kommentar von Stephen Hariss ).

  • Ersetze dies (LINES 151-154):

     $options = get_option( 'fb_options' ); if ( ! empty( $options['app_id'] ) ) $meta_tags['http://ogp.me/ns/fb#app_id'] = $options['app_id']; 

    Mit diesem:

     $meta_tags['http://ogp.me/ns/fb#app_id'] = 'FACEBOOK APP ID HERE'; 

    (Ersetzen Sie FACEBOOK APP ID HIER durch, naja, Ihre App ID – Nummer)

  • Ich habe immer noch dieses Plugin installiert, aber deaktiviert, so dass ich Updates von Zeit zu Zeit überwachen und Änderungen vornehmen kann.