Include PHP-Datei in Inhalt mit

Hier ist was ich habe

Ich habe kein Glück zu finden, wie man eine Datei einfach mit einem Shortcode in den Inhaltseditor einfügt.

Zum Beispiel, wenn ich form.php in meine Kontaktseite aufnehmen möchte, wie würde ich das mit einem Shortcode machen?

Unten wurde versucht, ohne Erfolg zu arbeiten.

Jede Hilfe wäre willkommen!

// Shortcode implementation function magic_stuff($atts) { // turn on output buffering to capture script output ob_start(); // include file (contents will get saved in output buffer) include(TEMPLATEPATH.'/wp-content/themes/grainandmortar/inc_static/test.php'); // save and return the content that has been output $content = ob_get_clean(); return $content; } //register the Shortcode handler add_shortcode('magic', 'magic_stuff'); 

Solutions Collecting From Web of "Include PHP-Datei in Inhalt mit"

Ich habe dafür einen Code aus einem alten Blogpost geändert und erlaube es auch, dass Abfragezeichenfolgen an die Datei angehängt werden.

Der Originalkredit geht an amberpanther.com , und es stellt sich heraus, dass sie auch ein Plug-in daraus gemacht haben.

 //create the shortcode [include] that accepts a filepath and query string //this function was modified from a post on www.amberpanther.com you can find it at the link below: //http://www.amberpanther.com/knowledge-base/using-the-wordpress-shortcode-api-to-include-an-external-file-in-the-post-content/ //BEGIN amberpanther.com code function include_file($atts) { //if filepath was specified extract( shortcode_atts( array( 'filepath' => 'NULL' ), $atts ) ); //BEGIN modified portion of code to accept query strings //check for query string of variables after file path if(strpos($filepath,"?")) { $query_string_pos = strpos($filepath,"?"); //create global variable for query string so we can access it in our included files if we need it //also parse it out from the clean file name which we will store in a new variable for including global $query_string; $query_string = substr($filepath,$query_string_pos + 1); $clean_file_path = substr($filepath,0,$query_string_pos); //if there isn't a query string } else { $clean_file_path = $filepath; } //END modified portion of code //check if the filepath was specified and if the file exists if ($filepath != 'NULL' && file_exists(get_stylesheet_directory_uri() . "/" . $clean_file_path)){ //turn on output buffering to capture script output ob_start(); //include the specified file include(TEMPLATEPATH.$clean_file_path); //assign the file output to $content variable and clean buffer $content = ob_get_clean(); //return the $content //return is important for the output to appear at the correct position //in the content return $content; } } //register the Shortcode handler add_shortcode('include', 'include_file'); //END amberpanther.com code //shortcode with sample query string: //[include filepath="/get-posts.php?format=grid&taxonomy=testing&term=stuff&posttype=work"] 

Ich setze meins, um vom Stylesheet uri zu ziehen (so wird es mit untergeordneten Themen und so funktionieren), aber Sie könnten diesen Code leicht anpassen, um von überall zu ziehen (einschließlich Plug-in-Verzeichnisse), oder entfernen Sie es ganz und verwenden Sie nur den vollständigen Pfad beim Einschließen der Datei. Sie könnten am Anfang sogar eine Bedingung mit einem Trigger-Zeichen hinzufügen, die besagt, dass sie einen bestimmten Pfad basierend auf dem ersten Zeichen des Dateinamens verwenden soll, z. B. mit einem “#” für das Vorlagenverzeichnis usw.

Ich verwende es, um eine Datei namens get-posts.php einzuholen, die sich in meinem Vorlagenverzeichnis befindet und die Ausgabe von verschiedenen Posts basierend auf einer Reihe von Parametern formatiert, die im Abfrage-String enthalten sind. Es erspart mir, spezielle Templates zu benötigen, weil ich die Datei einbinden, ein Format senden und die Posts mit dem Markup ausgeben kann, das ich in der Datei get-posts.php angegeben habe.

Es erlaubt auch Kunden, benutzerdefinierte Post-Typen in bestimmten Blog-Posts in bestimmten Formaten zu ziehen und ist ziemlich praktisch.

Lassen Sie es mich wissen, wenn Sie eine Klärung benötigen.

Hier ist ein anderer Weg, es zu tun, mit get_template_part von WordPress

 function include_file($atts) { $a = shortcode_atts( array( 'slug' => 'NULL', ), $atts ); if($slug != 'NULL'){ ob_start(); get_template_part($a['slug']); return ob_get_clean(); } } add_shortcode('include', 'include_file'); 

Beispiele:

[include slug="form"]

[include slug="sub-folder/filename_without_extension"]

Ich fand, dass der Include-Code, der ursprünglich von den AmberPanther-Leuten geschrieben wurde, nicht so gut für mich funktionierte, also fand ich ein anderes WordPress-Plugin, das ziemlich genau dasselbe macht. Es heißt Include Me, von Stefano Lissa. Die Verwendung besteht darin, dass Sie Ihren Pfad zu der Datei schreiben, beginnend mit dem Stammverzeichnis Ihrer Site.

So würden Sie beispielsweise auf Ihrer WordPress-Seite schreiben:

 [includeme file="wp-content/themes/your-theme/code/example-code.php"] 

und in Ihrer functions.php-Datei enthalten:

 < ?php if (is_admin()) { include dirname(__FILE__) . '/admin.php'; } else { function includeme_call($attrs, $content = null) { if (isset($attrs['file'])) { $file = strip_tags($attrs['file']); if ($file[0] != '/') $file = ABSPATH . $file; ob_start(); include($file); $buffer = ob_get_clean(); $options = get_option('includeme', array()); if (isset($options['shortcode'])) { $buffer = do_shortcode($buffer); } } else { $tmp = ''; foreach ($attrs as $key => $value) { if ($key == 'src') { $value = strip_tags($value); } $value = str_replace('&', '&', $value); if ($key == 'src') { $value = strip_tags($value); } $tmp .= ' ' . $key . '="' . $value . '"'; } $buffer = ''; } return $buffer; } // Here because the funciton MUST be define before the "add_shortcode" since // "add_shortcode" check the function name with "is_callable". add_shortcode('includeme', 'includeme_call'); } 

Natürlich würde ich auch empfehlen, das Plugin einfach zu installieren, damit Sie Updates nutzen können. https://wordpress.org/plugins/include-me/

Ok, zuerst würde ich die Ausgabepufferung fallen lassen.

Zweite Änderung:

 include(TEMPLATEPATH.'/wp-content/themes/grainandmortar/inc_static/test.php'); 

Zu

 include( get_stylesheet_directory() . '/inc_static/test.php'); 

Endlich,

Lesen Sie die Dokumentation hier: https://codex.wordpress.org/Shortcode_API

Sie müssen etwas zurückgeben, wenn Ihre test.php nicht etwas zurückgibt, werden Sie eine schlechte Zeit haben.

Stellen Sie daher sicher, dass test.php in etwa wie folgt funktioniert:

 $output = "STUFF"; // a variable you could return after include. // or function test() { // do stuff return $stuff; // a function that returns a value that you can call after include. } 

Dann, nachdem Sie Ihre test.php- Datei hinzugefügt haben – geben Sie einfach $output oder machen Sie etwas wie return test(); .