如何通过unctions.php附加到标题以实现自动发布插件

时间:2016-02-23 作者:Andre Bulatov

到目前为止,我终于得到了functions.php 使用此函数将字符串附加到特定帖子类型的自定义帖子标题的插件:

function append_album_review_to_title( $title ) {
    global $post;
    $text = \'Album Review: \';

    if ( get_post_type( $post->ID ) == \'album_review\' && in_the_loop() ){
        return $text . $title;
    }
    else {
        return $title;
    }
}
if(function_exists(\'add_filter\')) {
    add_filter(\'the_title\', \'append_album_review_to_title\');
}
虽然它几乎可以满足我的所有需要,但它仍然不会将字符串附加到标题上,因为它们是通过自动发布插件发布的。

我使用的插件的问题是NextScripts: Social Networks Auto Poster 无论我在哪里看到标题,都会附加所需的字符串,但当这个插件自动发布时,不会附加字符串。

问题是,当标题通过自动发布插件输出时,我如何更改我的功能以同时应用于标题?

更新1的原因in_the_loop()?

我使用in_the_loop() 因为如果我不这样做,字符串似乎会附加到页面上的每个链接上。我认为这可能是因为我附加到的post\\u类型是自定义类型。我只是试着删除它,当然“唱片评论:”被添加到页面上的每个链接中。

遗嘱%FULLTITLE% 仅使用手动操作<meta>s

我尝试使用%FULLTITLE% 无手动<meta> 标记,但它似乎没有附加字符串。我之所以不厌其烦地尝试这种方式,是因为YOAST插件(正如你所说)不仅已经包含了这些标签,而且还因为它已经在必要的时候在标题后面附加了“Album Review:”。所以,当我检查源时<head>, 标签如下所示:

<meta property="og:title" content="Album Review: [the rest of title]">

YOAST的追加还不够,我需要手动标记吗?

(对这种形式的交流表示歉意;WordPress StackExchange仍然不允许我发表评论或投票。)

1 个回复
SO网友:fischi

哇,这个插件真是一场噩梦。

但我有一个解决方案给你。在链接的描述中,可以使用占位符%FULLTITLE% 而不是%TITLE%. %FULLTITLE% 为标题应用筛选器。

从…起nxs_functions_adv.php 第19行(&A);20:

if (preg_match(\'/%TITLE%/\', $msg)) { $title = nxs_doQTrans($post->post_title, $lng); $msg = str_ireplace("%TITLE%", $title, $msg); }                    
if (preg_match(\'/%FULLTITLE%/\', $msg)) { $title = apply_filters(\'the_title\', nxs_doQTrans($post->post_title, $lng));  $msg = str_ireplace("%FULLTITLE%", $title, $msg); }          
是的,这实际上就是插件中代码的格式

这解决了您的第一个问题。

接下来要做的是将打开的图形信息添加到标题中,并对其应用标题过滤器。例如,facebook(源于WPBeginner):

//Adding the Open Graph in the Language Attributes
function f711_add_opengraph_doctype( $output ) {
    return $output . \' xmlns:og="http://opengraphprotocol.org/schema/" xmlns:fb="http://www.facebook.com/2008/fbml"\';
}
add_filter(\'language_attributes\', \'f711_add_opengraph_doctype\');

//Lets add Open Graph Meta Info

function f711_insert_fb_in_head() {
    global $post;
    if ( !is_singular()) //if it is not a post or a page
        return;
    echo \'<meta property="og:title" content="\' . get_the_title() . \'"/>\';
    echo \'<meta property="og:type" content="article"/>\';
    echo \'<meta property="og:url" content="\' . get_permalink() . \'"/>\';
    echo \'<meta property="og:site_name" content="\' . get_bloginfo( \'title\' ) . \'"/>\';
    if(!has_post_thumbnail( $post->ID )) { //the post does not have featured image, use a default image
        $default_image="http://example.com/image.jpg"; //replace this with a default image on your server or an image in your media library
        echo \'<meta property="og:image" content="\' . $default_image . \'"/>\';
    }
    else{
        $thumbnail_src = wp_get_attachment_image_src( get_post_thumbnail_id( $post->ID ), \'medium\' );
        echo \'<meta property="og:image" content="\' . esc_attr( $thumbnail_src[0] ) . \'"/>\';
    }
    echo "
";
}
add_action( \'wp_head\', \'f711_insert_fb_in_head\', 5 );
IMPORTANT 请确保尚未包含此信息。例如,YOAST SEO就是这样做的,这可能会让facebook感到困惑。他们将此信息用作链接框的标题。

最后,我建议对您的功能进行修改:丢失in_the_loop() 使过滤器适用于任何地方。此外,正如@PieterGoosen指出的,我跳过了不必要的检查function_exists().

function append_album_review_to_title( $title ) {

    global $post;
    $text = \'Album Review: \';

    if ( get_post_type( $post->ID ) == \'album_review\' ){
        return $text . $title;
    } else {
        return $title;
    }

}
add_filter(\'the_title\', \'append_album_review_to_title\');