web-dev-qa-db-ja.com

自動投稿プラグインのためにfunctions.phpでタイトルに追加する方法

私が今のところ持っているもの

この関数を使って、特定の投稿タイプのカスタム投稿タイトルに文字列を追加する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_typeがカスタム型であるために起こる可能性があると思います。私はそれを削除しようとしただけで、もちろん "Album Review:"がページ上のすべてのリンクに追加されました。

%FULLTITLE%は手動の<meta>sでのみ機能しますか?

あなたが説明したように手動の%FULLTITLE%タグなしで<meta>を使用しようとしました、しかしそれはストリングを追加するようには思われません。私がこの方法を試すのに煩わしかったのは、YOASTプラグインが(あなたが言ったように)すでにこれらのタグを含んでいるだけでなく、必要に応じてタイトルに "Album Review:"を追加しているからです。だから、私がソースを調べるとき、<head>では、タグは以下のようになります。

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

YOASTの追加は十分ではありません、そして私は手動タグをする必要がありますか?

(この形式のコミュニケーションをお詫び申し上げます、WordPress StackExchangeでは、まだコメントやコメントを投稿することはできません。)

1
Andre Bulatov

うーん、このプラグインは見て悪夢だった。

しかし、私はあなたのために解決策を得ました。リンクの説明では、%FULLTITLE%の代わりにプレースホルダー%TITLE%を使用できます。 %FULLTITLE%はタイトルにフィルタを適用します。

nxs_functions_adv.php 19行目と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); }          

はい、これは実際にコードがプラグインでフォーマットされる方法です。

これであなたの最初の問題は解決します。

次にやるべきことは、Open Graph情報をヘッダに追加し、それにタイトルフィルタを適用することです。たとえば、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');
1
fischi