web-dev-qa-db-ja.com

投稿/ページにギャラリーがあるか確認しますか?

ギャラリー(ショートコード_ [gallery]で挿入)が投稿/ページに挿入されている場合にのみ、コードを実行したいと思います。私は次のことをしました:

gallery_shortcode($post->ID) ?
$gallery = 1 : $gallery = 0;

ただし、これはギャラリーがあるかどうかにかかわらず常に$gallery = 0を設定します。私はこれを間違って使っていますか?

6
csm232s

試してみてください。

if (strpos($post->post_content,'[gallery') === false){
  $gallery = 0;
}else{
  $gallery = 1;
}
15
Bainternet

ここで提案された解決策についての私の繰り返しは、私のテーマのfunctions.phpの中の以下の関数です:

function has_gallery($post_id = false) {
    if (!$post_id) {
        global $post;
    } else {
        $post = get_post($post_id);
    }
    return ( strpos($post->post_content,'[gallery') !== false); 
}

テンプレートファイルで呼び出すことができます(The Loopについては関係ありません)。

$has_gallery = has_gallery($post_id) ? true : false;

もっと直接的:

has_gallery($post_id); //will evaluate to true/false

$post_idはオプションで、以下は のみ はThe Loop内で動作します。

has_gallery();
3
Pim Schaaf

単にget_post_gallery()関数を使うのはどうですか。これはまさにその通りです。ほとんどのテーマは、投稿に正しい本文​​CSSクラスを印刷するためのギャラリーがあるかどうかを確認しています。

if ( get_post_gallery() ) {
    // run your code in here
}

P.Sたとえ文字列関数が通常PHPで非常に高速であったとしても、私はコンテンツ全体を検索する解決策が本当に好きではありません、それはまだ大きなパフォーマンスオーバーヘッドです。

2
2ndkauboy