Verfasste Forenbeiträge

Ansicht von 15 Antworten - 1 bis 15 (von insgesamt 25)
  • Thread-Ersteller Kai J.

    (@kjoussen)

    Ich habe einen älteren Thread gefunden eigene-php-datein-in-childtheme-einbinden in dem Du empfiehlst:

    <?php include( get_stylesheet_directory() . '/includes/myfile.php'); ?>

    Das funktioniert auch, so lange der Code keine Grafik generiert.
    Das bringt wieder nur die komischen Zeichen.

    Also warum kann man in WP über eine Theme-Seite o.ä. keine Grafik erzeugen?
    Woran liegt das?

    Thread-Ersteller Kai J.

    (@kjoussen)

    Dein Hinweis bzgl. Desing und Funktion ist vollkommen richtig, aber da es sich um mein eigenes Theme handelt und um eine Intranet-Seite handelt, ist die „Gefahr“ zu vernachlässigen.

    Thread-Ersteller Kai J.

    (@kjoussen)

    Ich habe Deine Hinweise nicht ignoriert, verzeih.

    OK, um der Sache näher zu kommen:

    ich habe die Bibliothek phplot entfernt und meinen Test-Chartcode durch Standard-php-Grafikbefehle ersetzt, welcher außerhalb WP allein aufgerufen perfekt geht.

    Binde ich den Code

    header("Content-type: image/png");
    // erstellen eines leeren Bildes mit 400px Breite und 300px Höhe
    $bild = imagecreatetruecolor(400, 300);
    // Hintergrundfarbe erstellen
    imagecolorallocate($bild, 150, 150, 0);
    
    // Farben festlegen
    $farbe1 = imagecolorallocate($bild, 255, 255, 0);
    $farbe2 = imagecolorallocate($bild, 0, 255, 0);
    $farbe3 = imagecolorallocate($bild, 0, 0, 255);
    // Viereck zeichen
    // mit folgenden Kordinaten (x1, y1, x2, y2, Farbe);
    imagefilledrectangle ($bild, 20, 75, 350,250, $farbe1);
    imagefilledrectangle ($bild, 150, 100, 200, 280, $farbe2);
    imagefilledrectangle ($bild, 220, 150, 330, 190, $farbe3);
    // Ausgabe des Bildes
    imagepng($bild);
    

    aber in mein Template ein, welches bereits andere php-Befehle sauber ausführt, kommen wieder nur kryptische Zeichen.

    Also ist es irgendwas innerhalb WPs, welches es „verbietet“ Bilder per php zu malen, obwohl der php Code an sich richtig ist.

    Thread-Ersteller Kai J.

    (@kjoussen)

    In Österreich sagt man: „I werd narrisch“.

    1000 Dank, das geht jetzt wie gewünscht. Warum aber dann alle (4) Tutorials, die ich dazu gelesen habe demzufolge auch falsch sind, vermag ich nicht zu sagen….

    Das mit Nonces hatte ich in der Zwischenzeit bereits eingebaut, aber danke für den Hinweis.

    Und ja, das hattest Du erwähnt, Asche auf mein Haupt.
    Aber im Großen und Ganzen lags ja nur an zwei Kleinigkeiten. Der _ und das fehlende echo.

    Thread-Ersteller Kai J.

    (@kjoussen)

    Guten Morgen,

    danke, das mit dem _ hat funktioniert. Ich habe ja inzwischen einiges gelesen, aber das ist mir nirgends aufgefallen (was nicht heißen soll, dass es nirgends stand).

    Also gut, das funktioniert soweit, aber in meiner Metabox werden die Werte immer noch nicht angezeigt, obwohl sie ja sauber aus der DB gelesen werden.

    Also ich habe 3 Felder: A B und C
    Ich trage in meiner Box in A eine 1 ein (oder was auch immer, völlig egal)
    Der Wert wird sauber in der DB gespeichert und Seiten, die dieses Feld lesen reagieren sauber darauf.

    Etwas später gehe ich wieder in den Edit-Modus und trage bei B eine 1 ein.
    Da die bisherigen Werte aus der DB ja nicht in meiner Metabox eingetragen werden – trotz VALUE = …., steht in A also nichts, ergo wird für B der Wert in die DB geschrieben, für A aber gelöscht.
    Logisch.

    Deswegen ist ja Grundübel ja die Frage, warum die Werte – obwohl eingelesen und verfügbar – nicht in den Textboxen erscheinen.

    Thread-Ersteller Kai J.

    (@kjoussen)

    Also der Fehler scheint im Aufbau der Metabox zur Anzeige zu sein.

    Ich habe zu Testzwecken zwischen den Zeilen in denen ich die Werte aus der DB lese und der <table> einfach mal ein „echo variable“ eingefügt. Die Werte sind da, aber werden nicht in die Input-Boxen als Value eingetragen.
    Ergo, wenn ich speichere, wird da nix geschrieben.

    Und jetzt verstehe ich meine HTML und (zugegebenermaßen noch eher dünnen) php Kenntnisse nicht mehr.

    Thread-Ersteller Kai J.

    (@kjoussen)

    Ups…..stimmt, da war ja was.

    Also immer noch ungelöst.

    Thread-Ersteller Kai J.

    (@kjoussen)

    Da scheint es noch mehr Unterschiede zu geben….

    Ich habe 3 Felder.
    Angenommen ich trage im ersten Feld eine 1 ein und lasse die anderen leer.
    Dann stehen in der DB alle drei Keys in meta_key, aber nur beim ersten die 1 in meta_value.
    So weit so gut.

    Gehe ich wieder auf die Edit-Seite sehe ich oben bei individuelle Felder brav meine 1 zu dem einen Schlüssel.
    Trage ich jetzt im zweiten Key auch eine 1 ein, guess what, für diesen Key wird die 1 in die DB geschrieben, für den vorher im ersten Key wird die 1 gekillt.
    Ist ja auch logisch, weil in meinem Formular (Meta-Box) die Input-Box nicht gefüllt wurde beim lesen aus der DB. Ergo schreibe ich auch „nix“ zurück.

    Also irgendwo ist da ein grundlegender Wurm und ich finde ihn nicht.

    Thread-Ersteller Kai J.

    (@kjoussen)

    Moin,

    vielen Dank fürs Review und die schnelle Antwort.

    Aber dass ich in meiner Meta-Box etwas eintrage und es dann unter all den normalen individuellen Feldern erscheint „kann ich nicht akzeptieren“ 😉
    Für was baue ich denn dann in der Meta-Box im HTML-Teil extra value= ein?

    Ich habe ein Plug-In installiert, welches auch eine Meta-Box mitbringt und da passiert das nicht. Ich versuche gerade dessen Code zu verstehen…..vergeblich bisher.

    Also muss ich irgendwo oder irgendwie eine andere Technik verwenden, oder?
    Soll ich dann vielleicht gar nicht „Custom Fields“ verwenden sondern….ja was denn dann?

    Ich bin nach diesem Tutorial vorgegangen, habe jetzt aber auch das hier gefunden und sehe schon ein paar Unterschiede, die ich allerdings noch nicht ganz verstehe.

    Sicherheitshalber gebe ich zu, dass es sich hier nur um meine private Web-Seite handelt, weil viele meiner Freunde und Verwandten über den Globus verstreut sind und dort können sie immer neue Infos über mich etc. erfahren (ohne Facebook oder ähnliches Ungemach zu verwenden).
    Daneben bringe ich mir mit dieser Seite einfach php bei.
    Also dringend ist das Problem damit gar nicht. Aber es nagt an mir…..

    Thread-Ersteller Kai J.

    (@kjoussen)

    So, also im Großen und Ganzen funktioniert es wie es soll.

    Ich habe eine eigene Metabox, die Werte werden in die DB geschrieben, meine Unterseite, die darauf reagieren soll, tut es auch, aber….wenn ich wieder in den Edit-Modus der Seite gehe, stehen die vorher eingetragenen Werte für „meine“ Custom-Fields nicht in „meiner“ Metabox, sondern – mit den richtigen Variablennamen – oben unter all den anderen Individuellen Feldern.
    Äh….wo ist mein Fehler?

    Ich poste hier mal den Teil aus meiner functions.php.

    /* Metaboxes for Post/Page Edit Screen */
    function myhamburg_add_custom_box() {
    	add_meta_box(
    		'mh_box_id',                 // Unique ID
    		'My Hamburg Page Options',   // Box title
    		'myhamburg_box_id_html',     // Content callback, must be of type callable
    		'page'                       // Post type
    	);
    }
    add_action( 'add_meta_boxes', 'myhamburg_add_custom_box' );
    
    function myhamburg_box_id_html($post) {
    	echo 'Here you can set some individual settings for this particular page.' . "<br>";
    	echo 'These settings only affect blog-style pages. They do not affect static pages';
    
    	$mh_date_sort_order = get_post_meta($post->ID, 'mh_date_sort_order', true);
    	$mh_show_static_content = get_post_meta($post->ID, 'mh_show_static_content', true);
    	$mh_show_sec_nav = get_post_meta($post->ID, 'mh_show_sec_nav', true);
    
    	?>
    	<table class="form-table">
    		<tr>
    			<th><label for="mh_date_sort_order">Date Sort Order</label></th>
    			<td><input type="text" id="mh_date_sort_order" name="mh_date_sort_order" value="<?php esc_attr( $mh_date_sort_order ) ?>" class="regular-text"></td>
    			<td>1 = ascending Order, anything else or emtpy = standard descending order</td>
    		</tr>
    		<tr>
    			<th><label for="mh_show_static_content">Show static content of page</label></th>
    			<td><input type="text" id="mh_show_static_content" name="mh_show_static_content" value="<?php esc_attr( $mh_show_static_content ) ?>" class="regular-text"></td>
    			<td>1 = show static content, anything else or emtpy = do not show static content</td>
    		</tr>
    		<tr>
    			<th><label for="mh_show_sec_nav">Show second pagination above posts</label></th>
    			<td><input type="text" id="mh_show_sec_nav" name="mh_show_sec_nav" value="<?php esc_attr( $mh_show_sec_nav ) ?>" class="regular-text"></td>
    			<td>1 = show additional pagination above posts, anything else or emtpy = do not show second pagination</td>
    		</tr>
    	</table>'
    	<?php
    }
    
    add_action( 'save_post', 'mh_save_meta', 10, 2 );
    function mh_save_meta( $post_id, $post ) {
    	// check current use permissions
    	$post_type = get_post_type_object( $post->post_type );
     	if ( ! current_user_can( $post_type->cap->edit_post, $post_id ) ) {
    		return $post_id;
    	}
     	// Do not save the data if autosave
    	if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE ) {
    		return $post_id;
    	}
    	if( isset( $_POST[ 'mh_date_sort_order' ] ) ) {
    		update_post_meta( $post_id, 'mh_date_sort_order', sanitize_text_field( $_POST[ 'mh_date_sort_order' ] ) );
    	} else {
    		delete_post_meta( $post_id, 'mh_date_sort_order' );
    	}
    	if( isset( $_POST[ 'mh_show_static_content' ] ) ) {
    		update_post_meta( $post_id, 'mh_show_static_content', sanitize_text_field( $_POST[ 'mh_show_static_content' ] ) );
    	} else {
    		delete_post_meta( $post_id, 'mh_show_static_content' );
    	}
    	if( isset( $_POST[ 'mh_show_sec_nav' ] ) ) {
    		update_post_meta( $post_id, 'mh_show_sec_nav', sanitize_text_field( $_POST[ 'mh_show_sec_nav' ] ) );
    	} else {
    		delete_post_meta( $post_id, 'mh_show_sec_nav' );
    	}
    	return $post_id;
    }
    
    Thread-Ersteller Kai J.

    (@kjoussen)

    Ja, ich dachte wirklich in kann „meine“ Felder in die bestehende Auswahlliste bei individuelle Felder einfügen, scheint aber nicht zu gehen.

    Aber das mit den Metaboxen ist super, das gefällt mir und ich bin auf meiner Dev-Umgebung schon fleißig dabei das über meine functions.php zu implementieren.
    Ist gar nicht mal so wild.

    Vielen Dank für den Tipp!

    Thread-Ersteller Kai J.

    (@kjoussen)

    Über einen recht alten Beitrag in den Tiefen des Internets habe ich es mit ein wenig Gefummel hinbekommen.
    Jetzt kann man unter EINSTELLUNGEN sogar die Maximalzahl einstellen und diese wird in meinem Code berücksichtigt.

    Das geänderte Template sieht nun wie folgt aus:

    <?php
    /* 
    * Template Name: Blog-Page
    * Displays Blog-Pages without sidebar
    */ 
    get_header(); ?>
    <div class="wrap">
    	<div id="primary" class="content-area">
    		<main id="main" class="site-main" role="main">
    			<?php
    			$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
    			$listCategory = get_post_meta($post->ID, 'category_name', true);
    			$default_posts_per_page = get_option( 'posts_per_page' );			
    			$args = array(
    			'category_name' => $listCategory,
    			'paged' => $paged,
    			'posts_per_page' => $default_posts_per_page
    			);
    			query_posts($args);
    			while ( have_posts() ) :
    				the_post();
    				?>
    				<br><br>
    				<?php
    				get_template_part( 'template-parts/page/content', 'page' );
    			endwhile; // End of the loop.
    			// Previous/next page navigation.
    			the_posts_pagination( array(
    			'prev_text' => __( 'Previous page', 'MyHamburg' ),
    			'next_text' => __( 'Next page', 'MyHamburg' ),
    			'before_page_number' => '<span class="meta-nav screen-reader-text">' . __( 'Page', 'MyHamburg' ) . ' </span>',
    			  ) );
    			?>
    		</main><!-- #main -->
    	</div><!-- #primary -->
    </div><!-- .wrap -->
    <a href="#" class="topbutton"></a>
    <?php
    get_footer();
    
    Thread-Ersteller Kai J.

    (@kjoussen)

    Au weia….manchmal sieht man den Wald vor lauter Bäumen nicht und sucht einfach an der falschen Stelle. Ich bitte vielmals um verzeihung.

    In der Tat verwende ich ein bisher minimal modifiziertes Child-Theme, u.a. mit einer Blog-Page-php, die auf die Kategorie filtert und je nach aufgerufener Seite eben Fundstücke oder Rezepte oder oder oder darstellt, was die original page.php nicht kann.

    Und genau in meiner php-Datei – die bisher in allen anderen Themes bzw. Childthemes einwandfrei funktioniert hat – steckt der Wurm.

    Nochmals: vielen Dank und sorry für den Aufwand.

    Thread-Ersteller Kai J.

    (@kjoussen)

    Sorry, die Trennstriche – schwarz und grün – habe ich per Hand eingefügt ins Bild um es deutlicher klarzustellen.

    1. offensichtlicher Unterschied zwischen Deiner Installation und meiner:
    Ich verwende den Classic-Editor, weil ich Gutenberg nicht wirklich mag. Aber ich stelle „mal schnell“ zu Testzwecken um. Wer weiß…..
    2. Firefox wurde von meinem Computer verbannt, da es immer mehr Seiten gibt, die in FF nicht „rund“ laufen und im Vergleich zu Chrome ist er grottenlahm geworden.

    Ich poste die Ergebnisse morgen mal.

    Aber danke schon mal für Deine Mühe!

    Thread-Ersteller Kai J.

    (@kjoussen)

    Momentan habe ich das nur auf meinem Notebook lokal mit xampp am laufen, Zugriff von außen geht also leider nicht.

    Der Screenshot davon sollte es eigentlich zeigen.
    Die obere Hälfte zeigt den „bösen“ Fall, wo zwei Posts direkt aneinander kleben und das ist immer so, wenn die Bilder größer sind als der Text daneben.

    In der unteren Hälfte ist ein anderer Screenshot der zwei „saubere“ Posts zeigt, weil eben mehr Text als Bild enthalten ist.

    Deswegen ja meine Vermutung, dass das Padding nur bei Text am Ende des Posts funktioniert.

Ansicht von 15 Antworten - 1 bis 15 (von insgesamt 25)