我的插件如何显示填充的新帖子窗口

时间:2013-09-01 作者:MattK

我写了一个插件a feed reader like google reader in wordpress.An old screenshot of Orbital Feed Reader

目前,我允许人们使用内置的WP PressThis插件url重新记录馈送项目。我将参数和WP格式传递给我的用户。

我想获得更细粒度的控制-让我的用户指定帖子格式等。我想控制标题、正文,甚至可能是标签或格式之类的东西,但我希望我的用户在点击publish之前有机会对其进行编辑,以添加他们明智的想法。

在我的插件中,WP是如何做到这一点的?

1 个回复
SO网友:gmazzap

我已经安装了你的插件,但它不工作。

进纸计数器已正确更新,但未显示进纸(因此没有“按下此”按钮)。

之后,当我安装它时,我看到了几个注意事项:您是否正在测试您的插件,并且wp调试处于活动状态?

对我来说,最好的方法是将用户重定向到标准的wordpress帖子创建页面。但是如何预先填充它呢?

在快速查看您的代码之后,我将为您提供一个解决方案的框架,该解决方案应该根据您的插件进行改进和定制。

当然还有更优雅的方式,但我首先想到的是:

创建并保存包含所选提要内容的帖子,并将状态设置为自动草稿

  • 重定向用户以编辑刚创建的帖子的页面,如:

    Javascript:在文件js/myblogthis中。js\'

    jQuery().ready(function($) {
      $(\'.entry-tools a\').click(function(e) {
      e.preventDefault();
      var $entry = $(this).closest(\'.entry\');
      var $titleObj = $entry.find(\'.entry-title\');
      var _title = $titleObj.text();
      var _url = $titleObj.parent().attr(\'href\');
      var _by = $entry.find(\'.author\').text();
      var _date = $entry.find(\'.date\').text();
      var _content= $entry.find(\'.entry-content\').html();
      $.ajax({
          url: ajaxurl, type: \'POST\', dataType: \'json\',
          data: {
            title: _title, url: _url, by: _by, date: _date, content: _content,
            action: \'blog_this\', nonce: myblogthisData.nonce
          }
        }).done(
          function( data ) {
            if ( data && data.url ) { window.location.href = data.url
            } else { alert( "Error!" ); }
          }
        );
      });
    });
    

    PHP

    add_action(\'admin_enqueue_scripts\', \'enqueue_blog_this_js\');
    
    add_action(\'wp_ajax_blog_this\', \'my_blog_this\');   
    
    function enqueue_blog_this_js($page) {
      if ( $page != \'toplevel_page_orbital\' ) return;
      wp_enqueue_script(\'myblogthis\', plugins_url(\'js/myblogthis.js\', __FILE__), array(), null );
      $data = array( \'nonce\' => wp_create_nonce(\'myblogthis\') );
      wp_localize_script(\'myblogthis\', \'myblogthisData\', $data);
    }
    
    function my_blog_this() {
      error_reporting(0);
      if ( ! isset($_POST[\'nonce\']) || ! wp_verify_nonce($_POST[\'nonce\'], \'myblogthis\') )
        wp_send_json( array(\'error\' => \'Security Fail\') );
      $title = isset($_POST[\'title\']) ? $_POST[\'title\'] : \'\';
      $url = isset($_POST[\'url\']) ? $_POST[\'url\'] : \'\';
      $by = isset($_POST[\'by\']) ? $_POST[\'by\'] : \'\';
      $date = isset($_POST[\'date\']) ? $_POST[\'date\'] : \'\';
      $content = isset($_POST[\'content\']) ? $_POST[\'content\'] : \'\';
      if ( $title && $url && $by && $date) {
        $content .= sprintf(
          \'<p>Originally posted by: %s on %s (see: <a href="%s">%s</a>)</p>\',
          esc_html($by), esc_html($date), esc_url($url), esc_html($title)
        );
      }
      $args = array(
        \'post_status\' => \'auto-draft\',
        \'post_title\' => \'\',
        \'post_author\' => wp_get_current_user()->ID,
        \'post_content\' => $content
      );
      $id = wp_insert_post($args);
      if ( $id ) {
        $url = add_query_arg( array(\'action\'=> \'edit\', \'post\'=> $id), admin_url(\'post.php\') );
        wp_send_json( array(\'url\'=> $url ) );
      }
      wp_send_json( array(\'error\' => \'Saving Post Error\') );
    }
    
    如您所见,我尝试根据“mainwindow”输出的html创建js。php’。

    你使用的方法和我的方法之间的主要区别是,你让用户选择一个文本来重新写博客,而我使用整个内容。但通过一些js改进,您可能可以修改这种行为。

  • 结束

    相关推荐

    当与“SETUP_POSTATA”一起使用时,“GET_POSTS”和“wp_GET_RENECT_POSTS”有什么不同?

    这可能是一个完全“我对WP还是新手”类型的问题,但在使用get_posts() 和wp_get_recent_posts() 在我编写的自定义函数中setup_postdata(). 这是我的函数中的内容。php文件:<?php function getRecentPosts($total_posts = 2) { $total_posts = intval($total_posts); global $post; $args