Плагин типа 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
}
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’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(); ?>