Fügen Sie den Seiten, in denen der Shortcode verwendet wurde, einen Inline-Stil hinzu

Ich versuche, der Überschrift einen Stil hinzuzufügen, mit dieser Methode lädt der Stil nur einzelne Posts, aber wenn ich einen Shortcode verwende, um den Post-Inhalt zu laden, der nicht in der Kopfzeile geladen wird:

add_action( 'wp_head', 'output_styles') function output_styles($base_ID){ $global post; echo ''. get_post_meta($post->ID, 'append_css') .''; } 

In meinem ouput_styles ich die ID des ouput_styles , wenn ich die ouput_styles functionen aus der ouput_styles function ouput_styles :

 output_styles($pass_id); 

dann wird der Inhalt von output_style gedruckt, aber es ist nicht in der Kopfzeile. Es ist direkt vor dem Shortcode-Ausgang.

Wie kann ich den Style in der Kopfzeile ausgeben, wenn ich Shortcodes verwende?

Solutions Collecting From Web of "Fügen Sie den Seiten, in denen der Shortcode verwendet wurde, einen Inline-Stil hinzu"

In diesem Fall ist has_shortcode () dein Freund.

Zuerst haken wir uns in wp_print_styles statt wp_head . Im func haken wir nach, ob der Post unseren Shortcode enthält. Wenn dies der Fall ist, erhalten wir das gewünschte CSS und geben es als inline

.

 add_action ('wp_print_styles', 'wpse_enqueue_shortcode_css') ; function wpse_enqueue_shortcode_css () { global $post ; if (is_single () && has_shortcode ($post->post_content, 'my_shortcode')) { $append_css = get_post_meta ($post->ID, 'append_css', true) ; echo < < $append_css  EOF; } return ; } 

@bosco, danke für den Kommentar … Ich habe missverstanden, was @Alen versuchte zu erreichen (der global $post -Post im Code, der in der Frage enthalten war, warf mich ab).

Wenn mein Verständnis jetzt korrekt ist, sollte das Folgende den Trick machen (obwohl es ein bisschen hässlich ist). Er funktioniert, indem er sich in wp_print_styles innerhalb der function, die den wp_print_styles verarbeitet, einklinkt.

 add_shortcode ('my_shortcode', 'my_shortcode') ; function my_shortcode ($atts) { $defaults = array ( 'id' => '', // other atts for the shortcode ) ; $atts = shortcode_atts ($defaults, $atts) ; if (!empty ($atts['id'])) { global $my_shortcode_css ; // grab the CSS from the post whose ID was passed in the 'id' attribute of // my_shortcode, eg, [my_shortcode id='123'] // and store it in a global $my_shortcode_css = get_post_meta ($atts['id'], 'append_css', true) ; // no need to hook into wp_print_styles IF we don't have any CSS to output if (!empty ($my_shortcode_css)) { // hook into wp_print_styles with an anonymous func add_action ('wp_print_styles', function () { global $my_shortcode_css ; if (empty ($my_shortcode_css)) { return ; } echo < < $my_shortcode_css  EOF; // clean up, since we no longer need this global unset ($my_shortcode_css) ; }) ; } } // insert code to produce the output of the shortcode $output = ... ; return ($output) ; } 

Hinweis: Wenn Sie sich vorstellen können, dass [my_shortcode] mehr als einmal in einem bestimmten Beitrag verwendet wird, ist es wahrscheinlich eine gute Idee, obige Logik hinzuzufügen, um zu prüfen, ob CSS bereits für eine bestimmte Post-ID ausgegeben wurde. Ich überlasse das als “Übung für den Leser” 🙂