插入<!--nextPage-->的快捷代码

时间:2012-12-22 作者:N2Mystic

由于wordpress没有菜单图标(也称为“用户友好”)将命令添加到帖子或页面,因此我正在尝试创建一个快捷代码来完成此操作。

然而,正如逻辑所言,这并不容易。使用一个短代码只会插入到标记中,这是后处理,而不是预处理,因为wordpress在预处理中进行替换。

有人能解释一下如何做到这一点吗?

2 个回复
最合适的回答,由SO网友:Christine Cooper 整理而成

您想要实现的最好的解决方案是添加一个TinyMCE按钮,该按钮可以为您实现这一点,这本质上是为了让下一页功能对您的作者更加友好。这可能有点复杂,所以别客气。为了避免这个答案是一篇论文的长度,我在所有代码中添加了注释,以帮助您理解每个函数的作用,我强烈建议您阅读并彻底理解它们。

首先,在主题文件夹中,添加一个名为admin 并在其中创建文件class.new_tinymce_btn.php 带代码:

<?php
//class start
class add_new_tinymce_btn {

public $btn_arr;
public $js_file;
/*
 * call the constructor and set class variables
 * From the constructor call the functions via wordpress action/filter
*/
function __construct($seperator, $btn_name,$javascrip_location){
  $this->btn_arr = array("Seperator"=>$seperator,"Name"=>$btn_name);
  $this->js_file = $javascrip_location;
  add_action(\'init\', array(&$this,\'add_tinymce_button\'));
  add_filter( \'tiny_mce_version\', array(&$this,\'refresh_mce_version\'));

}
/*
 * create the buttons only if the user has editing privs.
 * If so we create the button and add it to the tinymce button array
*/
function add_tinymce_button() {
   if ( ! current_user_can(\'edit_posts\') && ! current_user_can(\'edit_pages\') )
     return;
   if ( get_user_option(\'rich_editing\') == \'true\') {
     //the function that adds the javascript
     add_filter(\'mce_external_plugins\', array(&$this,\'add_new_tinymce_plugin\'));
     //adds the button to the tinymce button array
     add_filter(\'mce_buttons\', array(&$this,\'register_new_button\')); 
   }
}
/*
 * add the new button to the tinymce array
*/
function register_new_button($buttons) {
   array_push($buttons, $this->btn_arr["Seperator"],$this->btn_arr["Name"]);
   return $buttons;
}
/*
 * Call the javascript file that loads the 
 * instructions for the new button
*/
function add_new_tinymce_plugin($plugin_array) {
   $plugin_array[$this->btn_arr[\'Name\']] = $this->js_file;
   return $plugin_array;
}
/*
 * This function tricks tinymce in thinking 
 * it needs to refresh the buttons
*/
function refresh_mce_version($ver) {
  $ver += 3;
  return $ver;
}

}//class end
?>
此代码将向可视化编辑器添加自定义按钮。

接下来,在主题文件夹中,创建这些文件夹adminjs/buttons 在里面,创建这个JS文件nextpage.js 带代码:

(function() {
    tinymce.create(\'tinymce.plugins.nextpage\', {
        init : function(ed, url) {
            ed.addButton(\'nextpage\', {
                title : \'Next Page Button\',
                image : url+\'/images/btn_nextpage.png\',
                onclick : function() {                    
                    var prompt_text = "<!--nextpage-->";
                    var caret = "caret_pos_holder";
                    var insert = "<p>" + prompt_text + " [next_page_button]</p> <span id="+caret+"></span>";
                     ed.execCommand(\'mceInsertContent\', false, insert);
                     ed.selection.select(ed.dom.select(\'span#caret_pos_holder\')[0]); //select the span
                     ed.dom.remove(ed.dom.select(\'span#caret_pos_holder\')[0]); //remove the span
                }
            });
        },
        createControl : function(n, cm) {
            return null;
        },
    });
    tinymce.PluginManager.add(\'nextpage\', tinymce.plugins.nextpage);
})(); 
您需要为按钮添加图像(/images/btn_nextpage.png). 上面的代码是一个非常简单的javascript函数,用于描述按下按钮时发生的情况。

现在,您需要通过将其添加到函数文件来加载此按钮类:

//load custom buttons class
require_once (TEMPLATEPATH . \'/admin/class.new_tinymce_btn.php\');
//create an instance of the class
$t = new add_new_tinymce_btn(\'|\',\'nextpage\',get_bloginfo(\'template_url\').\'/adminjs/buttons/nextpage.js\');
如果您在可视化编辑器中<!--nextpage--> 是通过Javascript在html/文本中添加的,在您刷新或更新页面之前,它不会显示在视觉上。这当然会让您的用户感到困惑,因为在刷新之前,他们无法直观地看到分离的位置,因此,我添加了这个短代码[next_page_button] 混合使用。单击该按钮时,将添加它。

所以你可能会问,它有什么作用?好吧,让我们来确定一下。在函数中添加此代码:

function christine_post_next_page_button() { 
return \'\';
 }
add_shortcode(\'next_page_button\', \'chrstine_post_next_page_button\');
注意return \'\'. 确实如此nothing! 因此,为用户添加一个可视的单独代码只是一个虚拟的短代码。

SO网友:here

这里有一种替代技术,可以在wordpress编辑器TinyMCE中添加一个按钮以插入<!-- next-page --> 遵循<!-- more --> 按钮此代码使用mce_buttons 要插入的筛选器wp_page 按钮位于现有wp_more 按钮

添加到函数。php:

// add <!-- next-page --> button to tinymce
add_filter(\'mce_buttons\',\'wysiwyg_editor\');
function wysiwyg_editor($mce_buttons) {
    $pos = array_search(\'wp_more\',$mce_buttons,true);
    if ($pos !== false) {
        $tmp_buttons = array_slice($mce_buttons, 0, $pos+1);
        $tmp_buttons[] = \'wp_page\';
        $mce_buttons = array_merge($tmp_buttons, array_slice($mce_buttons, $pos+1));
    }
    return $mce_buttons;
}
另请参见http://codex.wordpress.org/TinyMCE_Custom_Buttons

注释中的一行ish:

function my_mce_buttons($buttons) { $buttons[] = \'wp_page\';  return $buttons; }
add_filter(\'mce_buttons\', \'my_mce_buttons\');

结束

相关推荐

带有WordPress站点的自定义PHP应用程序

我创建了一个新的“页面模板”(这可能不是正确的方法,但这是我工作的方式),并使用该模板创建了一个新页面。在我制作的页面模板(PHP文件)中,我使用了大量PHP来实现页面功能,就像它有一个简单的登录和从SQL表查看信息一样。问题是,我需要能够将$\\u GET数据发送到页面。我可以发送帖子,但不能得到,我不知道URL是什么。例如,我希望有干净的URL(这就是我设置wordpress的目的)i、 e.:领域com/教学门户/mygetdata页面模板的名称是教学门户,我想mygetdata 输入PHP。但目前