Support » Allgemeine Fragen » Mein erstes Plugin Fehlermeldung beim aktivieren

  • Ich habe mir ein kleines Plugin geschrieben. Leider bekomme ich folgende Fehlermeldung beim aktivieren.

    Im Internet arbeitet es auch nicht richtig auf dem localhost läuft es normal.

    Das Plugin verursachte eine Fehlermeldung 1 Zeichen unerwartete Ausgabe während der Aktivierung. Sollte du Fehlermeldungen wie “headers already sent”, Probleme mit der Syndizierung der Feeds oder andere Fehler erhalten, versuche das Plugin zu deaktivieren oder zu löschen.

    Hier habe ich eine ZIP Datei hochgeladen:
    http://forum.wpde.org/attachments/plugins-und-widgets/8809d1388072522-plugin-laeuft-im-web-nicht-mybooks.zip
    Ich hoffe das mir da jemand Helfen kann und sich den Code einmal anschauen kann.

    Im WordPress Forum bekomme ich leider keine Antworten oder Hilfe.

Ansicht von 13 Antworten - 1 bis 13 (von insgesamt 13)
  • Siehe: http://faq.wpde.org/cannot-modify-header-information/

    Schau mal in der index.php ganz am Ende, da ist nach dem ?> noch ein Leerzeichen. Lösche das mal. Tritt der Fehler dann noch auf?

    Und bedenke, dass wp-content verschoben werden kann:
    http://codex.wordpress.org/Editing_wp-config.php#Moving_wp-content_folder

    Es gibt WP-Funktionen mit denen auf die Ordner zugegriffen werden kann, sonst funktioniert das Plugin nicht merh, wenn der Ordner woanders ist.

    Gruß, Torsten

    Hallo,

    wenn du den Debugmodus aktivierst ( http://codex.wordpress.org/Debugging_in_WordPress ) wirst du sehen, das WP folgendes 5 x meldet beim aktivieren deines Plugins.

    Notice: has_cap wurde mit einem Parameter oder Argument aufgerufen, der seit Version 2.0 veraltet ist! Die Benutzung von user_level in Plugins und Themes ist veraltet. Nutze stattdessen das Abfragen von roles oder capabilities. in /Users/staude/Projekte/wpdev/wp-includes/functions.php on line 3006

    Ich persönlich halte es für eine gute Idee auf dem Entwicklungssystem den DEBUG Modus IMMER aktivert zu haben, das hilft auch sauberen Code zu schreiben, der keine Warnings und Notices wirft. Macht auch das Fehlersuchen einfacher wenn nach einem Update es irgendwo hakt und man nicht erst viele Meldungen analysieren muss die nichts mit dem eigentlichen Problem zu tun haben.

    add_menu_page ( http://codex.wordpress.org/Function_Reference/add_menu_page ) und ad_submenu_page ( http://codex.wordpress.org/Function_Reference/add_submenu_page ) erwarten eine capability und nehmen keinen Userlevel mehr entgegen. Das führt zu deiner Fehlermeldung.

    Erlaube mit noch ein paar Anmerkungen.

    – Du verwendest eine eigene Tabelle, ohne die BlogID abzufragen. Das wird dazu führen das in einer Multisite Installation alle Sites mit einer gemeinsamen Tabelle arbeiten werden. Meistens ist das nicht das, was man möchte. http://codex.wordpress.org/Class_Reference/wpdb#Multi-Site_Variables

    – Die Dateien sind nicht UTF8, was bei mir schon mal zu defekten Umlauten führt.

    – Auch wenn du es nicht übersetzen willst, arbeite immer mit den __ Translatefunktionen, macht es leichter Text auszutauschen.

    – Eigene Hooks einbauen, macht das Leben leichter wenn man bei der zweiten Installation an irgendeiner Stelle mal was ein weing anders haben will – und wenn es z.B. nur das Childtheme ist das an einer Stelle einen anderen Text verwenden soll.

    – In der Index in Zeile 41 hast du noch wp_mybook festgecodet drinstehen.

    – in der edit.php nimmst du die ID ungeprüft entgegen und arbeitest dann mit ihr. Du könntest sie zumindest nach INT casten, da die ID immer Numerisch ist.
    http://codex.wordpress.org/Data_Validation

    Noch besser ist natürlich, in den Datenbankabfragen mit Prepared Statements zu arbeiten.
    http://codex.wordpress.org/Class_Reference/wpdb#Protect_Queries_Against_SQL_Injection_Attacks

    Gruß
    Frank

    Thread-Starter maffylein

    (@maffylein)

    Danke für die Infos.

    Mit dem normalen PHP komme ich ganz gut zurecht und kann einfach Sachen erstellen. Aber mit dem WordPress Plug In erstellen komme ich nicht klar.

    Kann mir da nicht jemand Helfen und das Script anpassen, damit das korrekt Funktioniert?

    Thread-Starter maffylein

    (@maffylein)

    Ich habe nun ein Plug-In E-Paper gefunden mit dem ich ein Flash-Magazin Archiv erstellt habe.

    Jetzt bräuchte ich nur noch ein weiteres Feld Tourbeschreibung in diesem Plug-In, wo ich einen Link zu einem Artikel einfügen kann.

    Mfg Maffylein

    Jetzt bräuchte ich nur noch ein weiteres Feld Tourbeschreibung in diesem Plug-In, wo ich einen Link zu einem Artikel einfügen kann.

    Vielleicht ist der Weg über Custom Post Type und Custom Fields die Lösung für dich:
    http://www.elmastudio.de/wordpress/jede-menge-moeglichkeiten-benutzerdefinierte-felder-in-wordpress/

    Das Prinzip dieses Forum ist: Hilfe zur Selbsthilfe. Wir können dir nicht dein Plugin programmieren, aber wir können dir helfen beim Testen oder Hinweise geben, wenn Du bereit bist zu Lernen.

    Viel Erfolg!

    Gruß, Torsten

    Thread-Starter maffylein

    (@maffylein)

    Ich habe nun das Plugin Types – Complete Solution for Custom Fields and Types installiert und ein Benutzerdefiniertes Feld erstellt. Das Feld erscheint nun nur im E-Paper Plug-In.

    Wie greife ich nun auf dieses Benutzerdefiniertes Feld
    in meiner Archiv Template zu? Das Feld heißt artikelurl

    Hallo maffylein,

    Custom Fields (oder Benutzerdefinierte Felder in der der deutschen Version) speichern die Daten jeweil im Kontext des Posts/Page
    http://codex.wordpress.org/Custom_Fields

    In deinem Template kannst du mit der Funktion get_post_meta ( http://codex.wordpress.org/Function_Reference/get_post_meta ) die Werte zugreifen.

    Gruß
    Frank

    Thread-Starter maffylein

    (@maffylein)

    $tourguid_url ist die artikelurl

    leider tut sich da nichts.

    <?php
    	/*
    	Template Name: EPaper Archive
    	*/
    
    	// WordPress Kopfbereich laden
    	get_header();
    ?>
    
    		<div id="container">
    			<div id="content" role="main">
    
    <?PHP
    
    	// Text über der Tabelle. Inhalt einer normalen Seite (Page).
    	if ( have_posts() )
    	{
        	while ( have_posts() )
        	{
            	the_post();
            	the_title('<h1>', '</h1>');
            	the_content('<p><strong>Weiterlesen …</strong></p><br><br>');
            	link_pages('<p><strong>Seiten:</strong> ', '</p>', 'number');
            	edit_post_link('Beitrag bearbeiten', '<p>', '</p>');
        	}
    	}
    
    	/**
     	* @var object $myQuery Liste aller Artikel.
     	*/
    
    	$buecher = new WP_Query( array( 'post_type' => 'epaper' ) );
    
    	while ( $buecher->have_posts() ) : $buecher->the_post();
    	?>
    
    	<div id="box">
    
    	<h2> <?PHP the_title(); ?> </h2>
    
    	<?PHP
            if ( !empty($post->post_excerpt) )
            {
                $_my_excerpt = $post->post_excerpt;
                // Für Browser, die keinen Umbruch im Tooltip zeigen:
                $_my_excerpt = str_replace("\r\n", " \r\n ", $_my_excerpt);
                $_my_excerpt = strip_tags($_my_excerpt);
                $_my_excerpt = htmlspecialchars($_my_excerpt, ENT_QUOTES);
            }
            else
            {
                $_my_excerpt = substr( $post->post_content, 0, 100);
                $_my_excerpt = str_replace("\r\n", " \r\n ", $_my_excerpt);
                $_my_excerpt = strip_tags($_my_excerpt);
                $_my_excerpt = htmlspecialchars($_my_excerpt, ENT_QUOTES);
    // ANPASSEN!
                // @see http://toscho.de/2009/php-funktion-end_on_word/
                $_my_excerpt = XWP::end_on_word($_my_excerpt) . ' …';
            }
    
    		$querystr = "SELECT * FROM $wpdb->postmeta Where post_id = ".$post->post_id."";
    
    ?>
    
    		<div style="float:left;">
    		<?php if ( has_post_thumbnail() ) {?>
    		<a href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>" class="artikelbild">
         	<?php the_post_thumbnail( ); ?></a>
    		<?PHP } ?>
    		</div>
    
    	<?PHP 
    
    		print "<div>$_my_excerpt";
    
    		print"<span style=\"float:right;\">";
    		// Link zum E-Paper
    		$epaperurl = get_post_meta($post->ID, 'epaper_meta_realepaper', true);
    		print '<br><b>Wanderf&uuml;hrer zum Online durchbl&auml;ttern</b> <a href="' . $epaperurl . '" target\"_blank\">' . __('Epaper', 'epaper') . '</a></br>';
    
    		// Link zum E-Paper
    		$epaper_pdfurl = get_post_meta($post->ID, 'epaper_meta_pdf', true);
    		print '<b>Wanderf&uuml;hrer zum herunterladen</b> <a href="' . $epaper_pdfurl . '" target\"_blank\">' . __('PDF Download', 'epaper') . '</a></br>';
    
    		$tourguid_url = get_post_meta($post->ID, 'artikelid', true);
    		print "<p>$tourguid_url</p>";
    
    		print "</span></div>";
    
    	?>
    
    	</div>
    
    	<br clear="all">
    
    <?PHP endwhile; ?>	
    
    			</div><!-- #content -->
    		</div><!-- #container -->
    
    <?php get_sidebar(); ?>
    <?php get_footer(); ?>

    Hallo,

    leider tut sich da nichts.

    Ich vermute mal du meinst, das $tourguid_url leer ist.

    Dann prüfe was $post->ID enthält und ob das die korrekte ID des CPT Beitrags ist, von dem du das CF hoen willst.
    Wenn die ID korrekt ist, prüfe in der Datenbank ob das CF auch wirklich gesetzt ist (100% korrekte Schreibweise?)

    Gruß
    Frank

    Thread-Starter maffylein

    (@maffylein)

    ich habe mit meta() die werte ausgelesen und das Benutzerdefnierte Feld das ich mit dem Plug in angelegt habe wird nicht ausgegeben.

    Dies hängt mit dem post typ von epaper zusammen da wird das Feld nicht ausgewertet.

    Ich habe gesehen, das man mit dem Plug In auch eigene Post Typen anlegen kann. Gibt es dafür auch eine Deutsche Beschreibung oder Tutorials für das Plug In.

    Thread-Starter maffylein

    (@maffylein)

    Ich habe nun nach langem Suchen einen Code Schnipsel gefunden.
    Nun werden auch die Kategorien mit ausgegeben.

    `add_action( ‚init‘, ‚create_post_type‘ );

    function create_post_type() {

    $labels = array(
    ’name‘ => _x(‚Books‘, ‚post type general name‘),
    ’singular_name‘ => _x(‚Book‘, ‚post type singular name‘),
    ‚add_new‘ => _x(‚Add New‘, ‚book‘),
    ‚add_new_item‘ => __(‚Add New Book‘),
    ‚edit_item‘ => __(‚Edit Book‘),
    ’new_item‘ => __(‚New Book‘),
    ‚view_item‘ => __(‚View Book‘),
    ’search_items‘ => __(‚Search Books‘),
    ’not_found‘ => __(‚No books found‘),
    ’not_found_in_trash‘ => __(‚No books found in Trash‘),
    ‚parent_item_colon‘ => “,
    ‚menu_name‘ => ‚Books‘

    );

    $args = array(
    ‚labels‘ => $labels,
    ‚public‘ => true, // Öffentlich zugänglich
    ‚publicly_queryable‘ => true,
    ’show_ui‘ => true, // Im Administrationsbereich anzeigen
    ’show_in_menu‘ => true, // Im Menü anzeigen
    ‚query_var‘ => true, // Für eigene Querys zugänglich machen
    ‚rewrite‘ => true,
    ‚capability_type‘ => ‚post‘,
    ‚has_archive‘ => true,
    ‚hierarchical‘ => true,
    ‚menu_position‘ => null,
    ’supports‘ => array(‚title‘,’editor‘,’thumbnail‘,’excerpt‘,’comments‘,’customfields‘),
    ‚taxonomies‘ => array( ‚category‘, ‚post_tag‘ ), // add default post categories and tags
    ‚public‘ => true,
    ‚rewrite‘ => array(’slug‘ => ‚custom‘)
    );

    register_post_type( ‚book‘, $args );
    register_taxonomy_for_object_type( ‚category‘, ‚book‘ );

    }

    // hook into the init action and call create_book_taxonomies when it fires
    add_action( ‚init‘, ‚create_book_taxonomies‘, 0 );

    // create two taxonomies, genres and writers for the post type „book“
    function create_book_taxonomies() {
    // Add new taxonomy, make it hierarchical (like categories)
    $labels = array(
    ’name‘ => _x( ‚Regionen‘, ‚taxonomy general name‘ ),
    ’singular_name‘ => _x( ‚Region‘, ‚taxonomy singular name‘ ),
    ’search_items‘ => __( ‚Search Region‘ ),
    ‚all_items‘ => __( ‚All Regionen‘ ),
    ‚parent_item‘ => __( ‚Parent Region‘ ),
    ‚parent_item_colon‘ => __( ‚Parent Region:‘ ),
    ‚edit_item‘ => __( ‚Edit Region‘ ),
    ‚update_item‘ => __( ‚Update Region‘ ),
    ‚add_new_item‘ => __( ‚Add New Region‘ ),
    ’new_item_name‘ => __( ‚New Region Name‘ ),
    ‚menu_name‘ => __( ‚Region‘ ),
    );

    $args = array(
    ‚hierarchical‘ => true,
    ‚labels‘ => $labels,
    ’show_ui‘ => true,
    ’show_admin_column‘ => true,
    ‚query_var‘ => true,
    ‚rewrite‘ => array( ’slug‘ => ‚region‘ ),

    );

    register_taxonomy( ‚region‘, array( ‚book‘ ), $args );

    }

    add_filter( ‚pre_get_posts‘, ‚my_get_posts‘ );

    function my_get_posts( $query ) {

    if ( is_home() && $query->is_main_query() )
    $query->set( ‚post_type‘, array( ‚post‘, ‚page‘, ‚book‘, ‚region‘ ) );

    return $query;
    }

    // Alle Datensätze anzeigen
    function add_custom_types_to_tax( $query ) {
    if( is_category() || is_tag() && empty( $query->query_vars[’suppress_filters‘] ) ) {

    // Get all your post types
    $post_types = array( ‚post‘, ‚book‘ );

    $query->set( ‚post_type‘, $post_types );
    return $query;
    }
    }
    add_filter( ‚pre_get_posts‘, ‚add_custom_types_to_tax‘ );

    Thread-Starter maffylein

    (@maffylein)

    Ich habe nun nach langem Suchen einen Code Schnipsel gefunden.
    Nun werden auch die Kategorien mit ausgegeben.

    add_action( 'init', 'create_post_type' );
    
    function create_post_type() {
    
    $labels = array(
        'name' => _x('Books', 'post type general name'),
        'singular_name' => _x('Book', 'post type singular name'),
        'add_new' => _x('Add New', 'book'),
        'add_new_item' => __('Add New Book'),
        'edit_item' => __('Edit Book'),
        'new_item' => __('New Book'),
        'view_item' => __('View Book'),
        'search_items' => __('Search Books'),
        'not_found' =>  __('No books found'),
        'not_found_in_trash' => __('No books found in Trash'),
        'parent_item_colon' => '',
        'menu_name' => 'Books'
    
    );
    
    $args = array(
        'labels' => $labels,
     	'public' => true, // Öffentlich zugänglich
    	'publicly_queryable' => true,
    	'show_ui' => true, // Im Administrationsbereich anzeigen
    	'show_in_menu' => true, // Im Menü anzeigen
    	'query_var' => true, // Für eigene Querys zugänglich machen
        'rewrite' => true,
        'capability_type' => 'post',
        'has_archive' => true,
        'hierarchical' => true,
        'menu_position' => null,
        'supports' => array('title','editor','thumbnail','excerpt','comments','customfields'),
    	'taxonomies' => array( 'category', 'post_tag' ), // add default post categories and tags
    	'public' => true,
    	'rewrite' => array('slug' => 'custom')
    );
    
    	register_post_type( 'book', $args );
    	register_taxonomy_for_object_type( 'category', 'book' );	
    
    }
    
    // hook into the init action and call create_book_taxonomies when it fires
    add_action( 'init', 'create_book_taxonomies', 0 );
    
    // create two taxonomies, genres and writers for the post type "book"
    function create_book_taxonomies() {
    	// Add new taxonomy, make it hierarchical (like categories)
    	$labels = array(
    		'name'              => _x( 'Regionen', 'taxonomy general name' ),
    		'singular_name'     => _x( 'Region', 'taxonomy singular name' ),
    		'search_items'      => __( 'Search Region' ),
    		'all_items'         => __( 'All Regionen' ),
    		'parent_item'       => __( 'Parent Region' ),
    		'parent_item_colon' => __( 'Parent Region:' ),
    		'edit_item'         => __( 'Edit Region' ),
    		'update_item'       => __( 'Update Region' ),
    		'add_new_item'      => __( 'Add New Region' ),
    		'new_item_name'     => __( 'New Region Name' ),
    		'menu_name'         => __( 'Region' ),
    	);
    
    	$args = array(
    		'hierarchical'      => true,
    		'labels'            => $labels,
    		'show_ui'           => true,
    		'show_admin_column' => true,
    		'query_var'         => true,
    		'rewrite'           => array( 'slug' => 'region' ),
    
    	);
    
    	register_taxonomy( 'region', array( 'book' ), $args );
    
    }
    
    add_filter( 'pre_get_posts', 'my_get_posts' );
    
    function my_get_posts( $query ) {
    
    	if ( is_home() && $query->is_main_query() )
    		$query->set( 'post_type', array( 'post', 'page', 'book', 'region' ) );
    
    	return $query;
    }
    
    // Alle Datensätze anzeigen
    function add_custom_types_to_tax( $query ) {
    if( is_category() || is_tag() && empty( $query->query_vars['suppress_filters'] ) ) {
    
    // Get all your post types
    $post_types = array( 'post', 'book' );
    
    $query->set( 'post_type', $post_types );
    return $query;
    }
    }
    add_filter( 'pre_get_posts', 'add_custom_types_to_tax' );
Ansicht von 13 Antworten - 1 bis 13 (von insgesamt 13)
  • Das Thema „Mein erstes Plugin Fehlermeldung beim aktivieren“ ist für neue Antworten geschlossen.