Вывести контент из плагина WordPress и переписать правила - PullRequest
0 голосов
/ 29 апреля 2009

Я создал плагин для WordPress с фильтром на the_content, который ищет определенный тег и выводит содержимое плагина вместо этого тега.

Теперь я хотел бы использовать правила перезаписи для вызова плагина и вывода данных в шаблоне, но я не нахожу особой помощи.

Может ли кто-нибудь предоставить пример или руководство по добавлению правила перезаписи с использованием встроенных методов wp и вызова моих методов в плагине, который выводит некоторый контент.

В идеале, я бы хотел, чтобы shop/ было сопоставлено, а затем передавал все после магазина моему методу отправки на моем плагине, чтобы я мог получить shop/category/shirts или shop/product/the-cool-shirt. Мой метод отправки будет обрабатывать разделение остальной части URL и вызывать методы соответственно.

Ответы [ 2 ]

0 голосов
/ 20 мая 2009

Я сделал нечто очень похожее не так давно, и я сделал это путем обмана.

Если вы считаете, что встроенные правила перезаписи слишком сложны или не способны выполнить работу, вам может быть проще поймать запрос и отфильтровать результаты. Упрощенная версия:

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, если вы хотите использовать постоянные ссылки.

0 голосов
/ 11 мая 2009

Это может стать довольно интересным. Я должен был сделать это для плагина в один момент, у меня нет его передо мной, так что это из памяти, но общая идея должна быть правильной.

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

?>

Использование регулярных выражений само по себе является монументальной задачей, я думаю, что использовал этот сайт: http://tools.netshiftmedia.com/regexlibrary/ для помощи.

Я также использовал плагин FakePage, чтобы фактически отображать мои собственные «динамические» страницы, как я их назвал, но я полагаю, что все в WP технически динамично.

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

Дайте мне знать, если вам нужна дополнительная помощь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...