Hello Dolly类型插件,允许人们添加自己的

时间:2014-04-03 作者:John Zon

我正在制作一个插件,通过快捷码在自定义404页面上显示一个随机笑话,基本上与默认的hello dolly插件非常接近,其中笑话被硬编码到脚本中。

我想允许用户添加自己的笑话,可以通过自定义帖子类型从数据库中提取,也可以将其存储到一个文件中,然后将其拉入脚本(分解或file\\u get\\u内容,我不知道)

我是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 个回复
最合适的回答,由SO网友:gmazzap 整理而成

不要为此使用设置api。

Register a custom post type, \'笑话“看register_post_type docs

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 );
});
对于每个参数,请参阅documentation.

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\' );
现在,您可以在您的帖子/页面中插入isert[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(); ?>

结束

相关推荐

在wp_database中的哪些位置定义了可用角色?

我上榜是为了测试我在多站点网络上使用的插件的私有beta版。插件作者在其中有添加自定义角色的代码。他们有一个bug,它删除了为用户提供除一个自定义角色之外的任何角色的功能。当我访问时../wp-admin/network/site-users.php, “添加用户”角色下拉列表仅显示此插件添加的一个角色。change role下拉菜单显示所有WP默认角色,以及此插件和其他插件添加的一些额外角色。如果我试图将一个用户更改为这些角色之一,我会得到一个“你不能给用户这个角色”错误页面。我一直在与开发人员讨论这个