2009-04-29 8 views
0

私は、the_contentにフィルタを持つワードプレスプラグインを作成しました。特定のタグを探して、そのタグの代わりにプラグインコンテンツを出力しました。wordpressプラグインのコンテンツを出力し、書き換えルールを

ここで、書き換えルールを使用してプラグインを呼び出し、テンプレート内のデータを出力したいと思いますが、私はそれほど助けがありません。

例を提供するか、組み込みのwpメソッドを使用して書き換えルールを追加し、いくつかのコンテンツを出力するプラグインでmyメソッドを呼び出す方法に関するガイダンスを提供できますか?

またはshop/product/the-cool-shirtになるように、shop/と一致させてから、私のプラグインのディスパッチメソッドにすべて渡してください。私のディスパッチメソッドは、残りのURLを分解してそれに応じてメソッドを呼び出す処理を行います。

答えて

0

これはかなり興味深いことがあります。私はプラグインのためにこれを一度にしなければならなかった、私は私の目の前にそれを持っていないので、これはそれがメモリのうち、しかし一般的なアイデアは正しいはずです。助けのためhttp://tools.netshiftmedia.com/regexlibrary/:正規表現を使用して

<?php 

add_action('init', 'rewrite_rules');   


function rewrite_rules() { 
    global $wp, $wp_rewrite; 
    $wp_rewrite->add_rule('(widget1|widget2|widget3)/([a-zA-Z0-9_-]{3,50})$', 'index.php?pagename=listing&category=$matches[1]&subcategory=$matches[2]', 'top'); 
    $wp->add_query_var('category'); 
    $wp->add_query_var('subcategory'); 
    $wp_rewrite->flush_rules(); 
} 

?> 

は私がこのサイトを使用すると信じて、それ自体が記念碑的な作業です。

私は実際に自分のカスタム "ダイナミック"ページを表示するためにFakePageプラグインを使用しましたが、私はWPのすべてが技術的にダイナミックであると思います。

http://scott.sherrillmix.com/blog/blogger/creating-a-better-fake-post-with-a-wordpress-plugin/

あなたはより多くの助けが必要なら、私に教えてください。

0

私はずっと前と非常に似たようなことをしましたが、私はそれを不正行為でやっていました。

組み込みの書き換えルールが複雑すぎる、または実行できない場合は、要求をキャッチして結果をフィルタする方が簡単です。簡易版:

add_action('parse_request', 'my_parse_request'); 

function my_parse_request (&$wp) { 
    $path = $wp->request; 

    $groups = array(); 
    if (preg_match("%shop/product/([a-zA-Z0-9-]+)%", $path, $groups)) { 
    $code = $groups[1]; 
    $product = get_product($code); // your own code here 
    if (isset($product)) { 
     add_filter('the_posts', 'my_product_filter_posts'); 
    } 
    } 
} 

function my_product_filter_posts ($posts) { 
    ob_start(); 
    echo "stuff goes here"; // your body here 
    $content = ob_get_contents(); 
    ob_end_clean(); 

    return array(new DummyResult(0, "Product name", $content)); 
} 

が説明するのは:

  1. parse_request上のアクションはデータベース検索前に呼び出されます。 URLに基​​づいて、他のアクションとフィルタがインストールされます。

  2. 投稿のフィルタは、データベースルックアップの結果を偽の結果に置き換えます。

DummyResultは、単純なポストと同じフィールドを持つクラス、またはそれを離れて得るためにそれらのちょうど十分である:リーダ放置宿題がたくさんあります

class DummyResult { 
    public $ID; 
    public $post_title; 
    public $post_content; 

    public $post_author; 
    public $comment_status = "closed"; 
    public $post_status = "publish"; 
    public $ping_status = "closed"; 
    public $post_type = "page"; 
    public $post_date = ""; 

    function __construct ($ID, $title, $content) { 
    $this->ID = $ID; 
    $this->post_title = $title; 
    $this->post_content = $content; 

    $this->post_author = get_default_author(); // implement this function 
    } 
} 

それは醜い、働くアプローチです。 template_redirectのフィルタを追加して、通常のページテンプレートを製品固有のテンプレートに置き換えることをお勧めします。かなりのパーマリンクが必要な場合は、URL正規表現を調整する必要があります。