Плагин типа Hello dolly, который позволяет людям добавлять свои собственные


Я создаю плагин, который показывает случайную шутку на пользовательской странице 404 с помощью шорткода, и он в основном достаточно близок к плагину hello dolly по умолчанию, где шутки жестко закодированы в сценарий.

Я хочу, чтобы пользователи могли добавлять свои собственные шутки, возможно, извлеченные из базы данных с помощью пользовательских типов сообщений, или просто хранить их в файле, который вставляется в скрипт (разорванный или файл_гет_контенты, я не знаю)

Я новичок в wordpress разработка плагинов, но я знаю довольно много php.

Вот код, который я в настоящее время должен создать страницу администратора

add_action('admin_menu', 'jokes_admin_add_page');
function jokes_admin_add_page() {
add_options_page('Jokes Page', 'Jokes Menu', 'manage_options', 'plugin', 'jokes_plugin_options_page');
}

 // display the admin options page
function jokes_plugin_options_page() {
?>
<div>
<h2>My custom plugin</h2>
Options relating to the Custom Plugin.
<form action="options.php" method="post">
<?php settings_fields('plugin_options'); ?>
<?php do_settings_sections('plugin'); ?>

<input name="Submit" type="submit" value="<?php esc_attr_e('Save Changes'); ?>" />
</form></div>

<?php
}
Author: John Zon, 2014-04-03

1 answers

Не используйте для этого api настроек.

Зарегистрируйте пользовательский тип записи, "Шутка" см. register_post_type документы

add_action( 'init', function () {
  $labels = array(
    'name'  => 'Jokes',
    'singular_name' => 'Joke',
    'add_new' => 'Add New',
    'add_new_item' => 'Add New Joke',
    'new_item' => 'New Joke',
    'edit_item' => 'Edit Joke',
    'view_item' => 'View Joke',
    'all_items' => 'All Jokea',
    'search_items' => 'Search Jokes',
    'not_found' => 'No jokes found.',
    'not_found_in_trash' => 'No jokes found in Trash.',
  );
  $args = array(
    'labels' => $labels,
    'public' => true,
    'publicly_queryable' => false,
    'show_ui' => true,
    'show_in_menu' => true,
    'show_in_nav_menus' => false,
    'query_var' => false,
    'rewrite' => false,
    'capability_type' => 'post',
    'has_archive' => false,
    'hierarchical' => false,
    'supports' => array( 'title', 'editor')
  );
  register_post_type( 'joke', $args );
});

Для каждого аргумента, пожалуйста, обратитесь к документации .

WordPress добавит для вас меню администрирования.

Теперь пользователи вашего сайта могут создавать свои собственные шутки.

На этом этапе вы можете написать функцию, которая принимает случайную шутку и возвращает разметку, я буду использовать get_posts для область применения:

function get_random_joke() {
  $args = array(
    'post_type' => 'joke', // be sure this is exactly 1st arg of register_post_type
    'posts_per_page' => 1, // one joke is enough
    'orderby' => 'rand' // randomly
  );
  $jokes = get_posts( $args );
  if ( empty( $jokes ) ) return; // no jokes, nothing to do
  $joke = array_pop( $jokes ); // get posts always returns an array
  $out = '<div id="joke">';
  $out .= sprintf( '<h3>%s</h3>', apply_filters('the_title', $joke->post_title) );
  $out .= sprintf( '<p>%s</p>', apply_filters('the_content', $joke->post_content) );
  $out .= '<div>';
  return $out;
}

И может вызывать эту функцию из короткого кода:

add_shortcode( 'joke' , 'get_random_joke' );

Теперь вы можете писать в своих сообщениях/страницах [joke], и будет показана случайная шутка (если есть какие-то...)

Однако, если вы разрабатываете плагин, возможно ли, что в теме файл 404.php не содержит никакого сообщения или страницы, так где вы разместите этот шорткод?

Вероятно, вы можете написать свой собственный шаблон 404 и использовать его вместо шаблона темы, просто используя фильтр на 'template_include':

add_filter( 'template_include', function( $template ) {
  if ( is_404() ) $template = plugin_dir_path( __FILE__  ) . '404.php';
  return $template;
} );

Используя этот код, когда есть запрос, который превращается в 404, WordPress потребует '404.php "внутри папки вашего плагина, вместо папки в теме.

В этом шаблоне вы можете использовать функцию get_random_joke() для вывода шутки, просто пример (тема 2013 года с высокой производностью):

<?php get_header(); ?>
<div id="primary" class="content-area">
  <div id="content" class="site-content" role="main">
    <header class="page-header">
      <h1 class="page-title">Not found</h1>
    </header>
    <div class="page-wrapper">
      <div class="page-content">
        <h2>This is somewhat embarrassing, isn&rsquo;t it?</h2>
        <p>It looks like nothing was found at this location. Maybe try a search?</p>
        <?php get_search_form(); ?>

        <?php echo get_random_joke(); ?>

      </div>
    </div>
  </div>
</div>
<?php get_footer(); ?>
 6
Author: gmazzap, 2014-04-03 12:22:57