web-dev-qa-db-fra.com

Besoin d'aide pour cibler un type d'article personnalisé avec des balises conditionnelles

J'ai trouvé du code en ligne pour créer des blocs de contenu sur mon blog WordPress. J'utilise un bloc de contenu en bas de la barre latérale de ma page pour un widget d'achats. Voici le code approprié de 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()
  ));
}

J'ai ajouté un autre code aujourd'hui pour tenter d'ajouter une publicité après le deuxième paragraphe de chaque message sur mobile . Voici cette section sur 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;
}
}

La fonction de publicité ci-dessus fonctionne très bien, mais elle insère également ma publicité après le paragraphe 2 du bloc de contenu commercial dans la barre latérale. Comment puis-je modifier le code pour cibler des publications uniques, mais exclure les blocs de contenu?

J'ai essayé ceci:

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

(J'apprends, mais ce que je pense que cela signifie: Si ceci! N'EST PAS un message OR s'il IS un "Bloc de contenu" , retourne le contenu tel quel sans l'annonce )

Et ça:

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

Mais ni fonctionne.

Quelqu'un pourrait-il s'il vous plaît me diriger dans la direction de ce que je fais mal? Est-ce le nom singulier 'Content Block'? Peut-être que je ne lis pas le code dans la traduction de mon profane ci-dessus?

....

Remarque secondaire: lors de la résolution de problèmes, j'ai essayé de cibler tout, sauf le contenu, à dessein en modifiant la ligne ci-dessus pour lire if (is_singular( 'Content Block' )) return $content;, mais cela place la publicité sur tout, y compris les posts, les pages et les blocs de contenu. Donc, je suppose que is_singular ( 'Content Block') ne fait pas l'affaire.

S'il vous plaît aider!

1
tarynevelyn

Vous voulez le premier paramètre ($post_type) de register_post_type () - par défaut, il est utilisé pour le " slug ". Dans votre cas, par conséquent:

content-block

Les étiquettes name et singular-name auxquelles vous vous référez ne servent qu'à des fins d'affichage - voir get_post_type_object () pour un exemple.

Donc, cela devrait fonctionner (notez que je n'ai pas testé le reste de votre code d'annonce):

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

NB: Le slug dans l'URL n'a pas pour être $ post_type, vous pouvez le changer en spécifiant l'argument de réécriture (voir le register_post_type () docs encore pour un exemple.)

2
William Turrell