web-dev-qa-db-ja.com

コンディショナルタグを使用してカスタム投稿タイプをターゲティングするためのヘルプが必要です

WordPressブログでコンテンツブロックを作成するためのコードをオンラインで見つけました。ページのサイドバーの下部にあるコンテンツブロックをショッピングウィジェットに使用しています。これはfunctions.phpからの関連コードです:

function initialize_content_blocks()
{
  register_post_type('content-block', array(
    'labels' => array(
      'name' => 'Content Blocks',
      'singular_name' => 'Content Block',
      'add_new_item' => 'Add New Content Block',
      'edit_item' => 'Edit Content Block',
      'new_item' => 'New Content Block',
      'view_item' => 'View Content Block',
      'search_items' => 'Search Content Blocks',
      'not_found' => 'No content_blocks found',
      'not_found_in_trash' => 'No content blocks found in Trash',
      'view' => 'View Content Block'
    ),
    'publicly_queryable' => false, 
    'exclude_from_search' => true,
    'public' => true,
    'rewrite' => false, 
    'supports' => array('title', 'editor'),
    'taxonomies' => array()
  ));
}

私は今日、他のコードを追加して、モバイル上のすべての投稿の段落2の後に広告を追加しようとしました。これはfunctions.phpのそのセクションです:

if ( $detect->isMobile() ) {
add_filter('the_content', 'wpse_ad_content');

function wpse_ad_content($content)
{
    if (!is_single) return $content;
    $paragraphAfter = 2; //Enter number of paragraphs to display ad after.
    $content = explode("</p>", $content);
    $new_content = '';
    for ($i = 0; $i < count($content); $i++) {
        if ($i == $paragraphAfter) {
            $new_content.= '<div class="content-ad">';
            $new_content.= '<a href="http://tarynwilliford.com/collaborate/">Advertisement</a>';
            $new_content.= '<script type="text/javascript" src="http://ap.lijit.com/www/delivery/fpi.js?z=287429&u=tarynwilliford&width=300&height=250"></script>';
            $new_content.= '</div>';
            }

        $new_content.= $content[$i] . "</p>";
    }

    return $new_content;
}
}

上記の広告機能はうまく機能しますが、サイドバーのショッピングコンテンツブロックの段落2の後にも広告が挿入されます。単一の投稿をターゲットにしてコンテンツブロックを除外するようにコードを変更する方法を教えてください。

私はこれを試してみました:

    if (!is_single() || is_singular( 'Content Block' ))  return $content;

(私は学んでいますが、これはどういう意味かと思います:これなら投稿ではありませんORそれがISでなければ 'Content Block'広告なしでコンテンツをそのまま返す

この:

    if (!is_single() || 'Content Block' == get_post_type())  return $content;

しかしどちらもうまくいきません。

誰かが私が間違っていることの方向を教えてください。それは単数名の 'Content Block'ですか?上の素人の翻訳のコードを正しく読んでいないのでしょうか。

…….

補足:私のトラブルシューティングでは、上記の行をif (is_singular( 'Content Block' )) return $content;に変更することで、意図的にコンテンツブロック以外のすべてをターゲットにしようとしましたが、投稿、ページ、コンテンツブロックを含むすべてに広告が表示されます。だから私はis_singular ( 'Content Block')がトリックをやっていないと思います。

助けてください!

1
tarynevelyn

register_post_type() の最初のパラメータ($post_type)が必要です - デフォルトでは " slug "に使用されます。

content-block

あなたが参照するnamesingular-nameラベルは表示目的のためだけです - 例については get_post_type_object() を見てください。

だからこれは動作するはずです(私はあなたの広告コードの残りの部分をテストしていないことに注意してください):

if (! is_single() || 'content-block' == get_post_type() ) {
  return $content;
}

注意:URLのスラッグは have には$ post_typeにはなりません。書き換え引数を指定することで変更できます( register_post_type() docsを見てください例)

2
William Turrell