2009-04-29 5 views
0

J'ai créé un plugin wordpress avec un filtre sur the_content, en recherchant un tag spécifique puis en sortant le contenu du plugin à la place de ce tag.Sortie du contenu des règles de plugin et de réécriture wordpress

Je voudrais maintenant utiliser les règles de réécriture pour appeler le plugin et sortir les données dans le modèle, mais je ne trouve pas beaucoup d'aide. Est-ce que quelqu'un peut donner un exemple, ou des conseils sur la façon d'ajouter une règle de réécriture en utilisant les méthodes wp intégrées et en appelant mes méthodes dans le plugin qui produit du contenu.

Idéalement, je voudrais correspondre à shop/ et ensuite passer tout après l'achat à ma méthode d'expédition sur mon plugin afin que je puisse avoir shop/category/shirts ou shop/product/the-cool-shirt. Ma méthode de répartition gère la séparation du reste de l'URL et des méthodes d'appel en conséquence.

Répondre

0

Cela peut devenir plutôt intéressant. Je devais le faire pour un plugin à un moment donné, je ne l'ai pas en face de moi, donc c'est hors de la mémoire, mais l'idée générale devrait être correcte.

<?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(); 
} 

?> 

Utilisation d'expressions régulières est une tâche monumentale en elle-même, je crois que je ce site: http://tools.netshiftmedia.com/regexlibrary/ aide. J'ai également utilisé le plugin FakePage pour afficher mes pages "dynamiques" personnalisées, comme je les ai appelées, mais je suppose que tout est techniquement dynamique dans WP.

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

Faites-moi savoir si vous avez besoin de plus d'aide.

0

J'ai fait quelque chose de très similaire il n'y a pas longtemps, et je l'ai fait en trichant. Si vous trouvez les règles de réécriture intégrées trop compliquées ou incapables de faire le travail, il vous sera peut-être plus facile d'intercepter la requête et de filtrer les résultats. Une version simplifiée:

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)); 
} 

Pour expliquer:

  1. L'action sur parse_request est appelée avant la base de données recherche. Basé sur l'URL, il installe les autres actions et filtres.

  2. Le filtre sur les publications remplace les résultats de la recherche dans la base de données par de faux résultats.

DummyResult est une classe simple qui a les mêmes champs en poste, ou juste assez pour sortir avec elle:

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 
    } 
} 

Il y a beaucoup de devoirs à gauche pour le lecteur dans la ci-dessus, mais c'est une approche de travail laide. Vous voudrez probablement ajouter un filtre pour template_redirect, pour remplacer le modèle de page normal par un modèle spécifique au produit. Et vous devrez peut-être ajuster l'URL regex si vous voulez de jolis permaliens.

Questions connexes