web-dev-qa-db-ja.com

WordPressのクイック/フィルタはコンテンツの前またはタイトルの後に挿入されます

私のfunctions.phpのポストコンテンツの前にコンテンツを挿入しようとしています - 私は通常のwpフックの使い方を知っていますが、他の領域にどのように挿入するかはわかりません。

これを試してみましたが、他の投稿タイプのコンテンツを削除していました:

function property_slideshow( $content ) {
 if ( is_single() && 'property' == get_post_type() ) {
    $custom_content = '[portfolio_slideshow]';
    $custom_content .= $content;
    return $custom_content;
    } 
}
add_filter( 'the_content', 'property_slideshow' );

これを条件付きにするにはどうすればよいですか。

28
Jason

the_contentフィルターを使用するだけです。例:

<?php
function theme_slug_filter_the_content( $content ) {
    $custom_content = 'YOUR CONTENT GOES HERE';
    $custom_content .= $content;
    return $custom_content;
}
add_filter( 'the_content', 'theme_slug_filter_the_content' );
?>

基本的に、投稿コンテンツを追加しますafterカスタムコンテンツを作成し、結果を返します。

編集

Franky @bueltgeが彼のコメントで指摘しているように、プロセスは投稿タイトルでも同じです。フィルターをthe_titleフックに追加するだけです:

<?php
function theme_slug_filter_the_title( $title ) {
    $custom_title = 'YOUR CONTENT GOES HERE';
    $title .= $custom_title;
    return $title;
}
add_filter( 'the_title', 'theme_slug_filter_the_title' );
?>

この場合、カスタムコンテンツを追加しますafterタイトル。 (どちらでも構いません。質問で指定したものを使用しました。)

編集2

サンプルコードが機能しない理由は、条件が満たされた場合にのみ$contentを返すであるためです。条件にelseとして$contentを変更せずに返す必要があります。例えば。:

function property_slideshow( $content ) {
    if ( is_single() && 'property' == get_post_type() ) {
        $custom_content = '[portfolio_slideshow]';
        $custom_content .= $content;
        return $custom_content;
    } else {
        return $content;
    }
}
add_filter( 'the_content', 'property_slideshow' );

このように、「プロパティ」投稿タイプではない投稿の場合、$contentが変更されずに返されます。

39
Chip Bennett
function property_slideshow( $content ) {
    if ( is_singular( 'property' ) ) {
        $custom_content = do_shortcode( '[portfolio_slideshow]' );
        $custom_content .= $content;
        }
        return $custom_content;
}
add_filter( 'the_content', 'property_slideshow' );

is_singular 条件付きタグは、単一の投稿が表示されているかどうかを確認し、この場合はpropertyである$ post_typesパラメータを指定できるようにします。

また、 do_shortcode をご覧になるとよいでしょう。

0
Brad Dalton