Fermer

janvier 6, 2024

WordPress : Comment insérer un espace publicitaire à mi-chemin dans une page ou une publication

WordPress : Comment insérer un espace publicitaire à mi-chemin dans une page ou une publication


Si vous avez parcouru mon site cette semaine, vous verrez peut-être des publicités qui ne correspondent pas tout à fait. Je m’efforce de faire en sorte que tout fonctionne correctement et que la plupart soient corrigés. Je fais cela pour augmenter la monétisation sur le site plutôt que d’être dépendant de Google adsense et obstruer votre vision du contenu avec des publicités insistantes et désagréables.

Une des recommandations qui m’a été faite était d’insérer une publicité à mi-parcours d’un article de blog ou du contenu d’une page. Bien que cela semble simple, cela peut faire des ravages dans la disposition des colonnes ou diviser les paragraphes. Ce n’est pas aussi simple que d’ajouter le nombre total de caractères, de diviser par deux et d’insérer le code d’annonce. Il existe quelques exceptions supplémentaires :

  • Rubriques – Je ne veux pas qu’une annonce suive un titre.
  • Paragraphes Je souhaite que les annonces soient insérées une fois qu’un paragraphe est terminé.
  • Colonnes – Je ne souhaite pas que les annonces soient insérées dans une colonne.

Pour ce faire, j’ai ajouté une fonction à functions.php dans mon thème enfant pour insérer l’espace publicitaire dans une page ou une publication avec le code suivant :

function insert_ad_in_middle_of_content( $content ) {
    // Only run this on single posts/pages
    if ( is_single() || is_page() ) {
        $closing_p = '</p>';
        $block_columns_class="wp-block-columns";

        // Split content to find the middle
        $halfway_mark = strlen( $content ) / 2;
        $first_half = substr( $content, 0, $halfway_mark );
        $second_half = substr( $content, $halfway_mark );

        // Adjust for wp-block-columns
        if (strpos($first_half, '<div class="' . $block_columns_class . '">') !== false &&
            substr_count($first_half, '<div class="' . $block_columns_class . '">') > substr_count($first_half, '</div>')) {
            $end_of_block_columns = strpos($second_half, '</div>') + strlen('</div>');
            $first_half .= substr($second_half, 0, $end_of_block_columns);
            $second_half = substr($second_half, $end_of_block_columns);
        }

        // Find a suitable place for the ad
        $suitable_place_found = false;
        while (!$suitable_place_found) {
            $position_of_p = strpos($second_half, $closing_p);
            if ($position_of_p !== false) {
                $substring_before_p = substr($second_half, 0, $position_of_p);
                // Check if the paragraph is immediately preceded by a heading tag
                if (!preg_match("/<h[1-6]>.*<\/h[1-6]>$/", $substring_before_p)) {
                    $suitable_place_found = true;
                } else {
                    // Move past this paragraph and continue searching
                    $second_half = substr($second_half, $position_of_p + strlen($closing_p));
                }
            } else {
                // No more paragraphs, exit the loop
                break;
            }
        }

        // Insert ad code
        $ad_code="<!-- Ad Code Here -->";
        if ($suitable_place_found) {
            $second_half = substr_replace($second_half, $ad_code, $position_of_p, 0);
        } else {
            // Fallback: Append ad at the end of the content
            $second_half .= $ad_code;
        }

        // Reassemble content
        $content = $first_half . $second_half;
    }

    return $content;
}

add_filter( 'the_content', 'insert_ad_in_middle_of_content' );

Voici une présentation détaillée de insert_ad_in_middle_of_content fonction, expliquant chaque partie étape par étape :

  1. Définition de la fonction:
function insert_ad_in_middle_of_content( $content ) {

Cette ligne définit une fonction nommée insert_ad_in_middle_of_content cela prend un argument, $content. Cet argument représente le contenu d’un article ou d’une page.

  1. Condition pour les publications/pages uniques:
if ( is_single() || is_page() ) {

La fonction vérifie d’abord si la requête actuelle concerne une seule publication ou une page en utilisant is_single() et is_page() les fonctions. La logique d’insertion d’annonces ne s’exécutera que si cette condition est vraie. Si vous souhaitez inclure des types de publication personnalisés, vous pouvez également les ajouter :

function insert_ad_in_middle_of_content( $content ) {
    $current_post_type = get_post_type();

    // Check for single standard posts, pages, or custom post types
    if ( is_single() || is_page() || $current_post_type == 'my_custom_post_type' ) {
        // ... rest of the code remains the same
    }

    return $content;
}

add_filter( 'the_content', 'insert_ad_in_middle_of_content' );
  1. Définitions des variables:
$closing_p = '</p>';
$block_columns_class="wp-block-columns";

Ici, deux variables sont définies. $closing_p contient la balise de paragraphe de clôture </p>. $block_columns_class est une chaîne représentant une classe CSS que WordPress utilise pour les colonnes de blocs.

  1. Trouver la moitié du chemin:
$halfway_mark = strlen( $content ) / 2;
$first_half = substr( $content, 0, $halfway_mark );
$second_half = substr( $content, $halfway_mark );

La longueur du contenu est réduite de moitié pour trouver un point médian approximatif. Le contenu est ensuite divisé en deux moitiés à ce stade.

  1. Ajustement pour les colonnes de blocs:
if (...) {
   ...
}

Ce bloc de code vérifie s’il y en a des non fermés wp-block-columns divs dans la première moitié du contenu. Si tel est le cas, il ajuste le point de partage pour garantir que l’annonce n’est pas insérée dans une colonne de bloc.

  1. Trouver un endroit approprié pour l’annonce:
while (!$suitable_place_found) {
   ...
}

Cette boucle while recherche un endroit approprié pour insérer l’annonce dans la seconde moitié du contenu. Il recherche une fin de paragraphe (</p>) qui n’est pas immédiatement précédé d’une balise de titre. Si une telle position est trouvée, $suitable_place_found est réglé sur true.

  1. Insertion du code d’annonce:
$ad_code="<!-- Ad Code Here -->";
if ($suitable_place_found) {
   ...
} else {
   ...
}

Ici, le code d’annonce réel (représenté par <!-- Ad Code Here -->) est défini. Si un emplacement approprié a été trouvé, le code d’annonce est inséré à cet endroit dans la seconde moitié du contenu. Dans le cas contraire, le code d’annonce est ajouté à la fin de la seconde moitié.

  1. Réassembler le contenu:
$content = $first_half . $second_half;

Après avoir inséré l’annonce, les première et seconde moitiés du contenu sont à nouveau concaténées.

  1. Renvoyer le contenu modifié:
return $content;
}

Le contenu modifié, maintenant avec l’annonce insérée, est renvoyé.

  1. Ajout du filtre:
    php add_filter( 'the_content', 'insert_ad_in_middle_of_content' );
    Enfin, la fonction est accrochée au the_content filtre. Cela indique à WordPress d’exécuter cette fonction sur le contenu des articles et des pages, permettant à la fonction de modifier le contenu avant qu’il ne soit affiché sur le site.

Ce code est utile pour placer dynamiquement des publicités dans le contenu, augmentant ainsi potentiellement l’engagement et les revenus. L’utilisation d’un mécanisme de secours garantit que les annonces seront toujours affichées, maximisant ainsi les opportunités de vues et de clics sur les annonces même si aucun emplacement approprié n’est trouvé avec la logique ci-dessus.




Source link