1

サイトのヘッダー/フッターを使用して、作成した PHP/HTML ファイルを投稿に埋め込む Wordpress プラグインを作成しようとしています。

通常の iFrame とプラグイン Advanced iFrame を組み合わせて使用​​してみました。これは機能し、ディレクトリの javascript/CSS ファイルを含めます。ただし、ページのサイズが変更されるたびに (UI 要素がスライド インおよびスライド アウトする)、iframe および Advanced iFrame は常に適切に処理するとは限りません。

次に、プラグインショートコードの作成を検討しましたが、これがこれまでのところです。

<?php
/*
Plugin Name: Calculator
Plugin URI: 
Description: Calculator
Version: 1.0
Author: Andrew
*/

add_shortcode("calculator", "create");

function create() {    
    include(plugin_dir_path(__FILE__).'calculator.php'); 
}
?>

ページ自体にショートコードを含めてい[calculator]ます。ページをロードすると、ヘッダーがロードされますが、その下 (ショートコードが通常生成される場所) はすべて空の白いページです。フッターも含まれていません。

プラグイン フォルダの構造は次のとおりです。

calculator/
    plugin.php //What is shown above
    calculator.php //Contains HTML UI and PHP code
    calculator.js //Contains UI functions
    calculator_style.css //CSS referenced relatively in calculator.php
    fonts/
        //various fonts for calculator_style.css
    js/
        jquery-1.9.0.min.js //jQuery referenced relatively in calculator.php
        //Other various JS files for calculator.php
    fpdf/
        fpdf.php //FPDF, used to create a PDF printout in calculator.php
        fonts/ 
            //various fonts for FPDF

Wordpress プラグインにはあまり詳しくありませんが、calculator.php を投稿に埋め込んでも、CSS/JS ファイルを適切に参照できるようにしたいと考えています。

また、プラグイン フォルダー内のローカル ファイルを参照するために、Calculator.php ファイルを書き直して、Wordpress PHP 関数を使用する必要がないようにしたいと考えています。

これはショートコードを使用して可能ですか? または、Wordpress の投稿内にディレクトリ/PHP ファイルを埋め込む別の/より良い方法はありますか?

編集: もう少し情報があります。これは、calculator.php がどのように見えるかです。

<?php
    require './fpdf/fpdf.php';

    $jsonData = json_decode($_POST['data'], true);  
    if ($jsonData != NULL) {    
        //Create PDF and return if the page is given POST data
    }
?>
<form id="pdfSave" action="" method="POST" enctype="multipart/form-data">
    <div><input id="name" class="boxField" type="text"></div>
    <div><input id="company" class="boxField" type="text"></div>
    <div><input id="phone" class="boxField" type="text"></div>
    <div><input id="email" class="boxField" type="text"></div>
    <div><input id="logo" name="final-logo" class="boxField" type="file"></div>
</form>
<button id="loanInfoSettings" class="boxButtonBack" onclick="saveForm();">Save</button>
//Other HTML calculator-UI stuff

基本的に、ユーザーが最初にページをロードしたとき、POST データは送信されていないため、さまざまな機能とフォームを含む HTML 計算機が表示されます。ユーザーが終了したら、保存ボタンをクリックすると、同じページが呼び出されて POST データが送信されます。今度は、ページが POST データで読み込まれると、表示される HTML の代わりに PDF が生成されます。

そのため、Wordpress の投稿が読み込まれると HTML 計算機とフォームが表示され、フォームが JavaScript を介して送信されると、投稿または埋め込まれたcalculator.php が次のように更新されるcalculator.php を含める方法が必要です。 POST データと生成された PDF。

編集2:これを表示するためにこれを試しました:

static function handle_shortcode($atts) {;
    self::$add_script = true;
    wp_enqueue_style('calculatorstyle');
    // actual shortcode handling here
include(plugins_url( 'netsheet.php', __FILE__ ));
}

また、出力バッファを使用してPHPファイルを出力する必要があることも読んだので、試しました

static function handle_shortcode($atts) {;
    self::$add_script = true;
    wp_enqueue_style('calculatorstyle');
ob_start();
include(plugins_url( 'netsheet.php', __FILE__ ));
return ob_get_clean();
}

編集3:インクルードを行うだけです:

static function handle_shortcode($atts) {;
    self::$add_script = true;
    wp_enqueue_style('calculatorstyle');
    // actual shortcode handling here
    include 'netsheet.php';
}

ショートコードに到達するとページのレンダリングが停止し、ヘッダーが表示され、その後にフッターのない空白のスペースが続きます。

4

1 に答える 1

0

はい、ショートコードはプラグインでそれを行うための優れたツールです。問題は、すべてを に詰め込むことはできないということですinclude('calculator.php')。これはマークアップのみを処理する必要があり、文字列を返す必要があるため、何も出力しないでください。

これは、WordPress マスターのように JavaScript をロードする方法 から適応したサンプル プラグインです。CSS エンキューを追加しましたが、Jedi トリックを使用してヘッダーに出力することはできませんが、それでも機能します。重要な注意点は、WP にバンドルされた jQuery (独自のものではない) を使用し、WP noConflictモードを使用する必要があることです。

<?php
/**
 * Plugin Name: Shorcode Jedi
 * Plugin URL: http://scribu.net/wordpress/optimal-script-loading.html
 * Author: scribu
 */

class My_Shortcode {
    static $add_script;

    static function init() {
        add_shortcode( 'myshortcode', array( __CLASS__, 'handle_shortcode' ) );
        add_action( 'init', array( __CLASS__, 'register_script_and_style' ) );
        add_action( 'wp_head', array( __CLASS__, 'print_styles' ), 999 );
        add_action( 'wp_footer', array( __CLASS__, 'print_script' ) );
    }

    static function handle_shortcode($atts) {;
        self::$add_script = true;
        wp_enqueue_style('my-style');
        // actual shortcode handling here
        return 'Hello, World!';
    }

    static function register_script_and_style() {
        wp_register_script( 'my-script', plugins_url( 'my-script.js', __FILE__ ), array('jquery'), '1.0', true );
        wp_register_style( 'my-style', plugins_url( 'my-style.css', __FILE__) );
    }

    static function print_script() {
        if ( ! self::$add_script )
            return;
        wp_print_scripts('my-script');
    }
}
My_Shortcode::init();

もう 1 つの方法は、ほぼ同じことを行うテーマ テンプレートを作成することですが、ショートコード プラグインは、ウィジェット、投稿、およびページで使用できるため、移植性が高いと思います。

于 2013-10-23T20:58:09.237 に答える