Пользовательская страница, созданная плагином wordpress - PullRequest
0 голосов
/ 07 августа 2020

Я пытаюсь понять, как создать плагин Wordpress, который добавляет страницу на сайт Wordpress, на котором он установлен. Я придумал следующее, которое работает и добавляет страницу.

Однако это далеко от того, чего я пытаюсь достичь:

  1. Как изменить всю страницу? Не только содержание? Прямо сейчас у него есть весь верхний и нижний колонтитулы и панель навигации.

  2. Как иметь на странице код PHP, а не только stati c контент?

  3. Возможно ли, чтобы все по URL-адресу (https://some-url.com/my-plugin/) перенаправлялось на эту же страницу?

Например:

<?php
/**
 * Plugin Name: MyPlugin
 * Plugin URI: myplugin.com
 * Description: MyPlugin
 * Version: 1.0
 * Author: Mike
 * Author URI: myplugin.com
 */

define( 'MYPLUGIN__PLUGIN_DIR', plugin_dir_path( __FILE__ ) );

function create_page() {

    $post_data = array(
        'post_title' => 'Test of my plugin',
        # How to change the entire page? Not just the content?
        # Also, how to have PHP code in the page, not just static content?
        'post_content' => 'Place all your body content for the post in this line.',
        'post_status' => 'publish', // Automatically publish the post.
        'post_type' => 'page', // defaults to "post".
        'post_name' => 'my-plugin', // url slug (will 'slugify' post_title if empty) https://some-url.com/my-plugin-page?/
    );

    // Lets insert the page now.
    wp_insert_post( $post_data );
}


function plugin_activation() {
    create__page();
}

function plugin_deactivation() {

}


register_activation_hook( __FILE__, 'plugin_activation' );
register_deactivation_hook( __FILE__, 'plugin_deactivation' );

1 Ответ

0 голосов
/ 07 августа 2020

Вы хотите wp_insert_post()

Использование:

$postarr = [
  'post_title' => 'My Page Title', // <title> tag
  'post_content' => '<p>page content</p>', // html for page content
  'post_type' => 'page', // blog post is default
  'post_name' => 'my-plugion-page', // url slug (will 'slugify' post_title if empty) https://some-url.com/my-plugion-page?/
];
$post_id = wp_insert_post($postarr);

Например, в вашем $postarr, если вы хотите, чтобы это была страница (а не сообщение в блоге), используйте 'post_type' => 'page'. Для заголовка страницы 'post_title' => 'My New Page' и т. Д.

См .: https://developer.wordpress.org/reference/functions/wp_insert_post/

Обновлено для дополнений к вопросу пользователя

  1. Если вы не хотите, чтобы он следовал шаблонам темы, вам нужно подключиться к ' page_template 'и используйте файл шаблона, который вы создаете в своем плагине. См.: https://wordpress.stackexchange.com/questions/3396/create-custom-page-templates-with-plugins

  2. В зависимости от ситуации вы можете добавить код в свой собственный шаблон, использовать шорткоды или настраиваемые блоки Гутенберга. Вы можете использовать Расширенные настраиваемые поля в пользовательском интерфейсе администратора и использовать get_field() в своем коде и т.д. c. В WordPress есть много возможностей. Если у вас есть собственный шаблон, вы можете просто добавить туда обычный PHP.

  3. Да, но вам нужно будет использовать регулярное выражение и создавать правила перезаписи, используя add_rewrite_rule(). Вот ссылки, которые помогают создавать правила перезаписи в WordPress

...