Shortcode für CPT posten Inhalt auf einer Seite

Ich benutze das Wiz Theme zusammen mit einem Plugin, das ich gerade schreibe. Das Wiz-Theme enthält Visual-Composer-Bundle- und Theme-Optionen für Seiten (Kopfzeile, Seitenleiste, Fußzeile usw.). Diese Optionen sind jedoch nur für Seiten verfügbar, nicht für Posts. Mein Kunde muss Posts und keine Seiten erstellen, da er einen benutzerdefinierten Post-Typ verwendet, den ich im Plugin codiert habe. Ich habe dann einen Beitrag mit Visual Composer erstellt, den mein Kunde in einem neuen Post klonen und bearbeiten kann, und einen Shortcode [dw_evento], der den Inhalt eines Posts in eine Seite einfügen soll. Der PHP-Code des Shortcodes lautet:

public static function dw_evento() { global $wp_filter, $merged_filters, $wp_current_filter; global $post; $post_id = $_GET['post_id']; if (is_array($atts)) extract($atts, EXTR_OVERWRITE); if (empty($post_id)) return; $save_wp_filter = $wp_filter; $save_merged_filters = $merged_filters; $save_wp_current_filter = $wp_current_filter; $post = get_post($post_id); setup_postdata($post); $content = $post->post_content; $content = apply_filters('the_content', $content); //$content = do_shortcode($content); $content = str_replace(']]>', ']]>', $content); $wp_filter = $save_wp_filter; $merged_filters = $save_merged_filters; $wp_current_filter = $save_wp_current_filter; return $content; } 

Dann habe ich eine Seite erstellt, die nur diesen Shortcode enthält, sodass ich für diese Seite Themenoptionen (Kopfzeile, Seitenleiste, Fußzeile) festlegen kann. Schließlich zeigt mein Plugin das Post-Archiv und verbindet jedes Element der Liste mit der Seite, die nur den Shortcode enthält, und übergibt die post_id in $ _GET.

Das Problem ist, dass Post-Inhalte nicht so aussehen, wenn Sie den Post direkt mit seinem Permalink durchsuchen und wenn Sie die entsprechende Seite mit meinem Shortcode durchsuchen.

Ganz zu schweigen davon, was sich um den Inhalt dreht, denn das hängt von fehlenden Optionen für Posts ab. Hier sehen Sie den Unterschied im Inhalt zwischen Post und Seite:

Hier ist der Post durch seinen Permalink durchsucht: http://www.miglioredirazzareport.eu/evento_type/internazionale-di-bari-2/ Bildbeschreibung hier eingeben

Und hier ist der gleiche Beitrag auf der Seite mit dem Shortcode [dw_evento] gerendert: http://www.miglioredirazzareport.eu/evento/?post_id=3753 Seite

Wie Sie sehen, rendert die Seite anders, insbesondere fehlen die horizontalen Linien. Das Fragment des generierten HTML ist in beiden Dokumenten identisch, zB für die Trophäe:

 

Die verwendeten CSS-Regeln unterscheiden sich jedoch ein wenig. Wenn Sie sehen, welche CSS-Regeln auf der Seite angewendet werden (Inspizieren in Chrome), erscheint ein “:: after” in dem Post, der auf der Seite fehlt:

 
::after

und dass “:: after” die relevanten CSS-classn anwendet und die horizontalen Linien erscheinen lässt:

 #ultimate-heading-447156b22ea4f2bf9 .uvc-heading-spacer.line_with_icon:before, #ultimate-heading-447156b22ea4f2bf9 .uvc-heading-spacer.line_with_icon:after { width: 182px; border-style: solid; border-color: #ccc; border-bottom-width: 1px; } 

Jetzt kommt das Problem von einer CSS-Datei, die nicht enthalten ist, wenn WordPress die Seite generiert. Sie können aus der Dokumentquelle sehen, dass der Abschnitt der Seite alle CSS außer einem verbindet, dh dieses:

  

Das ist genau die CSS-Datei, die die oben angegebene class “uvc-heading-spacer.line_with_icon: after” enthält.

Jetzt bin ich mir ziemlich sicher, dass ich diese Datei selbst hinzufügen kann, indem ich die “wp-head” -Aktion anhefte, aber das würde mein Plugin künstlich vom Ultimate VC Addons-Plugin abhängig machen, das nichts mit meinem zu tun hat.

Warum ist WordPress nicht inklusive Stylesheet auf meiner Seite?

Solutions Collecting From Web of "Shortcode für CPT posten Inhalt auf einer Seite"

Ich habe einen Wortumbruch gefunden, der das Problem “triggers”, aber ich werde das nicht als Antwort akzeptieren, bis ich nicht sicher bin, ob es die einzige Lösung ist (was ich nicht vermute).

Ich kann sagen, dass WP das CSS Ultimate VC Addons (UVCA von jetzt an) nicht enthält, da meine Seite keinen UVCA-Shortcode enthält, oder zumindest der Inhalt der ersten Seite nicht. Kurzwahlnummern in WP sind nicht rekursiv. Wenn ein Shortcode eine Ausgabe generiert, die andere Shortcodes enthält, liegt es in der Verantwortung des Programmierers, diese Shortcodes zu verarbeiten. Ich rufe tatsächlich an

 $content = apply_filters('the_content', $content); 

aber das ist nicht genug, um das erforderliche CSS zu enthalten, weil die Aktion wp-head zu diesem Zeitpunkt bereits ausgeführt wurde. Ich vermute, dass in der wp-head Aktion, sei es im WP-Code oder im UVCA-Code, ein Snippet wie folgt sein muss:

 foreach ($registered_shortcodes as $shortcode) if (strpos($page_content, $shortcode) !== FALSE) output_link_tags(get_dependencies($shortcode)); 

(Vorsicht, das ist fast Pseudo-Code und die Identifikatoren bestehen aus). Wenn also ein UVCA-Shortcode von Anfang an im Seiteninhalt vorhanden sein soll, wird WP (oder UVCA) das erforderliche CSS enthalten, ohne dass mein Code vom UVCA-Plugin abhängig ist.

Ich habe das “getriggers”, indem ich meine Seite mit meinem [dw_elenco] shortcode editiert habe und folgendes hinzugefügt habe:

 
[ultimate_heading main_heading="x"][/ultimate_heading]

Das kann nicht die beste Lösung sein und es ist sicher ein Fehler. Der Fehler kann in meinem Code (wahrscheinlich), im UVCA-Code (auch wahrscheinlich) oder im WP-Code (unwahrscheinlich) sein. Außerdem ist die Lösung nicht generisch. Wenn mein Kunde eines Tages ein anderes Plugin mit anderen Shortcodes hinzufügt, die ein benutzerdefiniertes CSS benötigen, wird diese Lösung nicht ausreichen.

Aber es ist die beste Lösung, die ich bisher gefunden habe.

EDIT: Ich kann jetzt meine Antwort akzeptieren, weil, obwohl es nicht die einzige Lösung ist, es keine saubere Lösung für dieses Problem gibt. Mehr Details in meiner anderen, allgemeineren Frage hier .