Beim Aufrufen von WordPress get_template_part innerhalb einer Shortcode-Funktion wird zuerst die Vorlage gerendert

Lesezeit: 3 Minuten

Beim Aufrufen von WordPress get template part innerhalb einer Shortcode Funktion wird zuerst
Gary O. Stenström

Ich habe eine Seite, auf der ich dem Benutzer erlauben muss, einen Textabsatz einzugeben. Fügen Sie dann nach diesem Text einen Shortcode ein, der eine Liste von Beiträgen rendert, und fügen Sie danach weiteren Freiformtext hinzu. Mein Gedanke war, dass sie in der Lage sein sollten, einen Shortcode einzufügen, der die Beiträge ausgibt. Auf diese Weise können sie einfach den Shortcode dort hinzufügen, wo die Beiträge erscheinen sollen.

Ich habe derzeit die Logik, die die Beiträge getrennt in einer eigenen Datei abruft. Derzeit füge ich es in eine Seite ein, indem ich einfach die get_template_part() Funktion:

get_template_part('donation', 'posts');

Ich habe mir angesehen, wie man einen Shortcode erstellt, und den folgenden Code in meine eingefügt functions.php Datei um den Shortcode zu erstellen:

add_shortcode('donation-posts', 'fnDonatePosts');   
function fnDonatePosts($attr, $content)
{
    get_template_part('donation', 'posts');    
}

Die donation-posts.php korrekt ausgeführt wird und die Posts erscheinen, werden sie jedoch immer VOR dem Inhalt positioniert und nicht an der Stelle, an der der Shortcode platziert wurde.

Ich habe versucht, die zu entfernen get_template_part() Funktion und nur etwas Text ausgeben und das funktioniert gut. Also ich verstehe, dass die get_template_part() ist vielleicht nicht der richtige Weg, aber ich war nicht in der Lage, einen Weg zu finden, um das zu tun, was ich versuche (ich bin sicher, dass es einen Weg gibt … ich habe ihn nur nicht gefunden).

Ich habe versucht:

include(get_template_directory(). '/donation-posts.php');
include_once(get_template_directory(). '/donation-posts.php') : 

Aber diese stoppten die Verarbeitung, sobald sie auf den PHP-Code in der enthaltenen Datei trafen.

Ich habe auch versucht:

$file = file_get_contents(get_template_directory(). '/donation-posts.php');  
        return $file;

Dies gibt jedoch nur den Inhalt der Datei zurück (wie der Funktionsname andeutet), was bedeutet, dass dies nicht der Fall ist ausführen das PHP-Skript, um die Beiträge zurückzugeben.

Jemand da draußen hat das schon mal gemacht?

Beim Aufrufen von WordPress get template part innerhalb einer Shortcode Funktion wird zuerst
Das Alpha

Sie können dies versuchen, es kann Ihr Problem lösen, weil get_template_part reagiert grundsätzlich wie PHP's requirees wird nicht zurückgegeben, sondern der Inhalt wird sofort dort wiedergegeben, wo es aufgerufen wurde.

add_shortcode('donation-posts', 'fnDonatePosts');   
function fnDonatePosts($attr, $content)
{        
    ob_start();  
    get_template_part('donation', 'posts');  
    $ret = ob_get_contents();  
    ob_end_clean();  
    return $ret;    
}

  • Es tut mir leid, dass es so lange gedauert hat, bis ich antworte, aber ich habe eine Menge Projekte auf meinem Teller, und dies ist ein Pro-Bono-Projekt, daher steht es entsprechend in den Prioritäten. Wie auch immer, deine Lösung war genau das, was ich brauchte! Danke!

    – Gary O. Stenström

    27. September 2012 um 14:12 Uhr

  • Es ist so eine hässliche Lösung, aber es ist die beste (einzige?) Lösung.

    – Stefan

    23. Januar 2014 um 21:26 Uhr

Hier ist eine dynamischere Version, bei der Sie den Pfad zur Vorlage übergeben können.

function template_part( $atts, $content = null ){
   $tp_atts = shortcode_atts(array( 
      'path' =>  null,
   ), $atts);         
   ob_start();  
   get_template_part($tp_atts['path']);  
   $ret = ob_get_contents();  
   ob_end_clean();  
   return $ret;    
}
add_shortcode('template_part', 'template_part');  

Und der Shortcode:

[template_part path="includes/social-sharing"]

  • Genial, obwohl SO mir gesagt hat, dass Kommentare nicht dafür da sind Danke Sätzen kann ich nur sagen, danke, tolle Modularität!

    – Luis

    5. Oktober 2016 um 5:40 Uhr

Minimale Version der akzeptierten Antwort:

function my_template_part_shortcode() {
    ob_start();
    get_template_part( 'my_template' );
    return ob_get_clean();
}
add_shortcode( 'my_template_part', 'my_template_part_shortcode' );

wo my-template.php ist die Datei, die Sie einschließen möchten.

get_template_part() hat bei mir nicht funktioniert, wenn ich es in functions.php verwendet habe. Ich habe stattdessen locate_template() innerhalb von ob_start und clean verwendet. Zum Beispiel:

function full_petition_shortcode( $attr ) {
    ob_start();
    locate_template( 'petition.php', TRUE, TRUE );

    return ob_get_clean();
}
add_shortcode( 'full-petition', 'full_petition_shortcode' );

1002250cookie-checkBeim Aufrufen von WordPress get_template_part innerhalb einer Shortcode-Funktion wird zuerst die Vorlage gerendert

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy