web-dev-qa-db-ja.com

プラグインの配布とパッケージング

外部アプリケーションへのカスタマーポータルとしてWPを使用する予定のプロジェクトがあります。アプリケーションはWebサービス(soap/xml)呼び出しを介してアクセスされます。

アプリケーションにはかなりの数のフォームがあり、そのためにFormidableのFormプラグインを使用する予定です。ログインプロセスが変更されているため、実際にはリモートでログインが行われ、ローカルユーザーが存在しない場合はローカルユーザーが作成されます。

もう少し先を見越して、必要なカスタムページの配布方法を理解しようとしています。私はテーマ別にするつもりはありません。だから私はプラグインをインストールし、データベースを(カスタムページ用に)修正することを想像してみてください。

私の質問は私の状況に適用できるプラグインを配布するためのガイド/標準的な方法論がありますか?プラグインに特定のページがある場合、それらはどのようにインストールされますか?それに応じてメニューはどのように調整されますか。

2
user44021

私はこれを理解したかどうかはよくわかりませんが、プラグインを使用してページを「シミュレート」したいのではないかと私は考えています。これを試してみましょう:

あなたの見解に応じるために変数を作成してください。

add_action( 'query_vars', 'add_query_vars' );
function add_query_vars( $vars ) {
    array_Push( $vars, 'form_id' );
    return $vars;
}

この変数を埋めるように書き換え規則を作成します。

add_action( 'rewrite_rules_array', 'rewrite_rules' );
function rewrite_rules( $rules ) {
    $new_rules = array(
        'forms/([^/]+)/?$' => 'index.php?form_id=$matches[1]'
    );
    return $new_rules + $rules;
}

さて、あなたのサイトのoptions-permalink.phpページにアクセスしてルールをフラッシュして上記のルールを有効にしてください( http://yourdevsite.com/wp-admin/options-permalink.php )。

http://yourdevsite.com/forms/some-form または同等の http:// yourdevsiteのようなカスタムURLにアクセスできます。 .com /?form_id = some-form .

さて、WordPressのようにメインクエリを抑制することはできません、一致するform_idが発生したときにそれをオーバーライドしましょう:

add_action( 'wp', 'custom_wp_query' );
function custom_wp_query( $wp ) {

    // Don't do anything for other queries
    if ( ! $form_id = get_query_var('form_id') )
        return false;

    global $wp_query;

    // Let's respond this request with this function
    $func = 'form_' . str_replace( '-', '_', $form_id );

    // Throw a 404 if there's no function to deal with this request
    if ( ! function_exists( $func ) ) {
        $wp_query->is_404 = true;
        return false;
    }

    // Set as a valid query for this case
    $wp_query->is_404 = false;
    $wp_query->is_single = true;
    $wp_query->found_posts = 1;

    // Call the function
    $post = call_user_func( $func );

    // Stick this post into the query
    $wp_query->posts = array( $post );
    $wp_query->post = $post;

}

そして最後にあなたの投稿を作成します。

function form_some_form() {
    return (object) array(

        // Put a negative ID as they don't exist
        'ID' => Rand() * -1,

        // What matters for us
        'post_title' => 'Form title',
        'post_content' => 'Some post content (the form itself, presumably)',

        // It is important to maintain the same URL structure of 'add_rewrite_rules',
        // otherwise wrong links will be displayed in the template
        'post_name' => 'forms/' . get_query_var( 'form_id' ),
        'post_guid' => home_url( '?form_id=' . get_query_var( 'form_id' ) ),

        // Admin
        'post_author' => 1,

        // Straighforward stuff
        'post_date' => date( 'mysql' ),
        'post_date_gmt' => date( 'mysql' ),
        'post_status' => 'publish',
        'post_type' => 'page',
        'comment_status' => 'closed',
        'ping_status' => 'closed'
    );
}

ですから、some-other-formというURLを持つフォームのためにもっとカスタムページを作成したい場合は、form_some_other_formのようにform_some_formという名前の関数を作成してください。

明らかに、編集リンクはadminの存在しない投稿にあなたを送るようには機能しません。

そしてメニューについては、あなたが望むように、私はこれらのページをカスタムリンクとして挿入することを勧めます。

1
vmassuchetto