Сделать шаблон переопределения плагина

есть ли способ переопределить шаблон wordpress плагином?

Я хотел бы сделать целевую страницу. Если плагин обнаруживает некоторые запросы GET или POST, он должен переопределить тему wordpress и показать свою собственную.

Это будет как-то так:

if (isset($_GET['action']) && $_GET['action'] == 'myPluginAction'){
    /* do something to maintain action */
    /* forbid template to display and show plugin's landing page*/
}

Я знаком с Кодексом WP, но я не помню, есть ли какая-либо функция для этого. Конечно, я погуглил его безрезультатно.

Спасибо за любые идеи заранее.

2 ответов


вам нужен крючок template_include. Это не кажется документированным в кодексе, но вы можете найти больше примеров здесь в SO или в Клиент StackExchange Вордпресс

plugin файл

<?php
/**
 * Plugin Name: Landing Page Custom Template
 */
add_filter( 'template_include', 'so_13997743_custom_template' );

function so_13997743_custom_template( $template )
{
    if( isset( $_GET['mod']) && 'yes' == $_GET['mod'] )
        $template = plugin_dir_path( __FILE__ ) . 'my-custom-page.php';

    return $template;
}

пользовательский шаблон в папке плагина

<?php
/**
 * Custom Plugin Template
 * File: my-custom-page.php
 *
 */

echo get_bloginfo('name');

результат

посещение любого url-адреса сайта с ?mod=yes отобразит файл шаблона плагина, например:http://example.com/hello-world/?mod=yes.


вы должны создать папку '/слайдер/' внутри папки плагинов, внутри купон, вам нужно добавить сказать, папок, электронной почты 'писем' и поставить нужный шаблон внутри '/письма/ переопределять. просто скопируйте этот код в main.php вашего плагина.

<?php
/**
 * Plugin Name: Custom Plugin
 */

function myplugin_plugin_path() {   
  // gets the absolute path to this plugin directory 
  return untrailingslashit( plugin_dir_path( __FILE__ ) ); 
}

add_filter( 'woocommerce_locate_template', 'myplugin_woocommerce_locate_template', 10, 3 ); 
function myplugin_woocommerce_locate_template( $template, $template_name, $template_path ) {

  global $woocommerce;  
  $_template = $template; 
  if ( ! $template_path ) $template_path = $woocommerce->template_url; 
  $plugin_path  = myplugin_plugin_path() . '/woocommerce/'; 
  // Look within passed path within the theme - this is priority 
  $template = locate_template( 
    array( 
      $template_path . $template_name, $template_name 
    ) 
  );

  // Modification: Get the template from this plugin, if it exists 
  if ( ! $template && file_exists( $plugin_path . $template_name ) ) 
    $template = $plugin_path . $template_name;  

  // Use default template 
  if ( ! $template ) 
    $template = $_template; 

  // Return what we found 
  return $template; 
 }
?>

для справки переопределение шаблона с помощью плагина