it-swarm.com.de

Shortcode zum Einfügen von <! - nextpage ->

Da WordPress nicht über ein Menüsymbol (auch als "benutzerfreundlich" bezeichnet) verfügt, um den Befehl zu einem Beitrag oder einer Seite hinzuzufügen, versuche ich, einen Shortcode zu erstellen, um dies zu tun.

Allerdings ist es logischerweise nicht so einfach. Wenn Sie dies mit einem Shortcode tun, werden diese lediglich in das Markup eingefügt. Dies ist ein Post-Process-Vorgang und kein Pre-Process-Vorgang, da WordPress diesen im Pre-Process-Vorgang ersetzt.

Kann jemand Aufschluss darüber geben, wie dies getan werden kann?

4
N2Mystic

Die beste Lösung für das, was Sie erreichen möchten, was im Wesentlichen darin besteht, die nächste Seitenfunktion benutzerfreundlicher für Ihre Autoren zu gestalten, ist das Hinzufügen einer TinyMCE-Schaltfläche, die dies für Sie erledigt. Das kann etwas kompliziert sein, also halte deinen Hut. Um zu vermeiden, dass diese Antwort die Dauer einer Abschlussarbeit ist, habe ich in allen Codes Kommentare eingefügt, um Ihnen das Verständnis der einzelnen Funktionen zu erleichtern, und ich empfehle Ihnen nachdrücklich, diese zu lesen und gründlich zu verstehen.

Fügen Sie zunächst in Ihrem Themenordner einen Ordner mit dem Namen admin hinzu und erstellen Sie darin die Datei class.new_tinymce_btn.php mit folgendem Code:

<?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
?>

Dieser Code fügt dem visuellen Editor benutzerdefinierte Schaltflächen hinzu.

Erstellen Sie als Nächstes in Ihrem Themenordner diese Ordner adminjs/buttons und erstellen Sie im Inneren diese JS-Datei nextpage.js mit Code:

(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);
})(); 

Sie müssen ein Bild für die Schaltfläche hinzufügen (/images/btn_nextpage.png). Der obige Code ist eine ziemlich einfache Javascript-Funktion für das, was passiert, wenn die Taste gedrückt wird.

Jetzt müssen Sie diese Schaltflächenklasse laden, indem Sie Folgendes zu Ihrer Funktionsdatei hinzufügen:

//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');

Um dieses Problem noch komplizierter zu machen, wird <!--nextpage-->, wenn Sie sich im visuellen Editor befinden und in HTML/Text durch Javascript hinzugefügt, erst dann angezeigt, wenn Sie die Seite aktualisiert oder aktualisiert haben. Dies kann natürlich für Ihre Benutzer verwirrend sein, die bis zu einer Aktualisierung nicht sehen können, wo die Trennung stattfindet. Daher habe ich diesen Shortcode [next_page_button] zum Mix hinzugefügt. Es wird hinzugefügt, wenn Sie auf die Schaltfläche klicken.

Sie fragen sich vielleicht, was es macht? Nun, lassen Sie uns das bestimmen. Fügen Sie diesen Code in Ihre Funktionen ein:

function christine_post_next_page_button() { 
return '';
 }
add_shortcode('next_page_button', 'chrstine_post_next_page_button');

Achten Sie auf return ''. Es macht nichts ! Es ist also nur ein Dummy-Shortcode, um eine visuelle Trennung für den Benutzer hinzuzufügen.

5

Hier ist eine alternative Technik zum Hinzufügen einer Schaltfläche zum WordPress-Editor TinyMCE zum Einfügen von <!-- next-page --> nach der <!-- more -->-Schaltfläche. Dieser Code verwendet den Filter mce_buttons, um die Schaltfläche wp_page direkt nach der vorhandenen Schaltfläche wp_more einzufügen.

Füge zu functions.php hinzu:

// 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;
}

Siehe auch http://codex.wordpress.org/TinyMCE_Custom_Buttons

einzeiler aus Kommentaren:

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