Überprüfen Sie, ob der erste Absatz ein Bild ist, und zeigen Sie dann direkt danach den benutzerdefinierten Code an.

Ich möchte etwas Code in functions.php hinzufügen, der dies tut:

Wie mache ich es? Ein Beispielcode-Snippet ist sehr zu begrüßen.

PS: Der benutzerdefinierte Code könnte auch eine Anzeige sein (zB Google Adsense).

Solutions Collecting From Web of "Überprüfen Sie, ob der erste Absatz ein Bild ist, und zeigen Sie dann direkt danach den benutzerdefinierten Code an."

Wie wäre es mit ein paar einfachen Zeilen mit jQuery?

 jQuery(document).ready( function ($) { if ($(".entry-content:first-child").has('img').length) //this check for the img tag $(".entry-content:first-child").after("
MY CUSTOM CODE
"); else $(".entry-content:first-child").before("
MY CUSTOM CODE
"); });

Aktualisieren:

Hier ist eine einfache Lösung mit php nativen DOMDocument

 add_filter('the_content','add_code_before_afterImage'); function add_code_before_afterImage($content){ $MYCODE = '
this is my custom code
'; $doc = new DOMDocument(); @$doc->loadHTML('< ?xml encoding="'.get_bloginfo('charset').'">'.$content); $ps = $doc->getElementsByTagName('p'); foreach ($ps as $p) { if (false !== stripos($p->nodeValue,'img')); return str_replace($p->nodValue, $p->nodValue.$MYCODE, $content); } break; } //if we got here then there is no img tag in the first paragraph //so we return the code before the content. return $MYCODE.$content; }

Update 2:

@ Sarathis Kommentar gehen Sie mir denken, dass Sie nicht wirklich jeden Teil des Inhalts analysieren müssen, nur den ersten Absatz und überprüfen, ob es ein IMG-Tag hat, so ist hier eine einfachere und weitaus schnellere Lösung mit nur PHP native str_replace und stripos

 add_filter('the_content','simple_img_tag_search'); function simple_img_tag_search($content){ $MYCODE = '
this is my custom code
'; //split content to first paragraph and the rest $paragraphs = explode( '', $content, 2 ); //extract the first paragraph $first_paragraph = $paragraphs[0]; //then just look for img tag if (false === stripos($first_paragraph, "',$first_paragraph.''.$MYCODE,$content); } }

Um den ersten Absatz (

) abzufangen, können Sie eine Regex verwenden. Das ist nicht optimal , also sei gewarnt. 🙂

Dann testen Sie die Übereinstimmung für ein Bild und fügen den zusätzlichen Inhalt abhängig vom Testergebnis ein. Ich verwende hier zwei functionen, einen für jeden Schritt: Der erste findet den ersten Absatz, der zweite den ersten Treffer.

 // Late priority parameter to let shortcodes and other filters do their work first. add_filter( 'the_content', 'wpse_52662_add_extra', 1000 ); /** * Reads the content and calls a callback to add extra content. * * @param string $content * @return string */ function wpse_52662_add_extra( $content ) { // restrict to single posts: if ( ! is_single() ) { return $content; } return preg_replace_callback( '~

|\s+[^>]*>)(.*?)

~miU' // find

, 'wpse_52662_callback' // pass the result to the callback , $content , 1 // stop after first match ); } /** * Callback for wpse_52662_add_extra() * * @param array $m Matches. $m[0] contains the whole match, * $m[2] the content of the paragraph. * @return string */ function wpse_52662_callback( $m ) { $extra = '

Hello World!

'; return ( FALSE === strpos( $m[2], '

Sie können DOMDocument verwenden, um den HTML-Inhalt wie folgt zu analysieren:

 add_filter( 'the_content', 'add_html_after_first_image' ); function add_html_after_first_image( $content ) { $my_custom_html = '
MY CUSTOM CODE
'; // Create a dom document from the post content. // The content needs to be wrapped in a root element to be valid xml, hence the div tags. // I used loadXML because loadHTML adds the unnecessary , , and . if( $dom = DOMDocument :: loadXML( '
' . $content . '
' ) ) { // Create a document fragment with your custom html. $custom = $dom -> createDocumentFragment(); $custom -> appendXML( $my_custom_html ); // Get the root element, and first child. $root = $dom -> firstChild; $first = $root -> firstChild; // Check if the first child is a paragraph, the first grandchild is an image, // and if the paragraph has no content other than the image. $has_image = 'p' == $first -> tagName && '' == trim( $first -> textContent ) && 1 == count( $first -> childNodes ) && 'img' == $first -> firstChild -> tagName; // If $has_image is true then add the custom div after the first paragraph, // otherwise add it before. $root -> insertBefore( $custom, $has_image ? $first -> nextSibling : $first ); // Set the new content to the altered html. $content = $dom -> saveHTML(); } return $content; }

BEARBEITEN:

Hier ist eine aktualisierte function, die so optimiert wurde, dass sie schneller als die obige function ausgeführt wird.

Tipp: Das

-Tag darf keinen anderen Inhalt als das -Tag enthalten.

(Dazu gehören Leerzeichen)

 add_filter( 'the_content', 'add_html_after_first_image' ); function add_html_after_first_image( $content ) { $my_custom_html = '
MY CUSTOM CODE
'; // Explode the content to extract and parse only the first paragraph. $parts = explode( '', $content, 2 ); $p = $parts[0] . ''; // Create a dom document from the first paragraph of content. // I used loadXML because loadHTML adds the unnecessary , , and . // Checking for an opening

tag prevents the creation of a DOMDocument, // and lowers the execution time on posts that don't start with a paragraph. if( substr( $p, 0, 3 ) == '

' && $dom = @DOMDocument :: loadXML( $p ) ) { // Create a document fragment with your custom html. $custom = $dom -> createDocumentFragment(); $custom -> appendXML( $my_custom_html ); $first = $dom -> firstChild; // Check if the first child is a paragraph, the first grandchild is an image, // and if the paragraph has no content other than the image. $has_image = 'p' == $first -> tagName && '' == $first -> textContent && 1 == count( $first -> childNodes ) && 'img' == $first -> firstChild -> tagName; // If $has_image is true then add the custom div after the first paragraph, // otherwise add it before. $dom -> insertBefore( $custom, $has_image ? $first -> nextSibling : $first ); // Set the new content to the altered html. $p = $dom -> saveHTML(); } // If the dom document could not be created, then the first element is not a // paragraph and the custom code should be prepended to the content. else $p = $my_custom_html . $p; // Append the rest of the content to the paragraph. return $p . $parts[1]; }