Ondersteuning » Code oplossingen gezocht » Get Post ID in wordpress sidebar wil niet lukken

  • Hallo mensen,

    Waarschijnlijk is het maar een kleine wijziging in de code, maar ik kom er zelf maar niet achter.

    Overal op mijn wordpress website wordt de post-id herkend. Behalve in de sidebars.php. De post id (in combinatie met de meta id van wordpress) moet voor class achtervoegsel zorgen.

    Voor het overzicht heb ik hieronder een overzicht gemaakt van de code die sidebars.php aanroepen.

    require_once(TEMPLATEPATH . '/epanel/custom_functions.php'); 
    
    require_once(TEMPLATEPATH . '/includes/functions/comments.php');
    
    require_once(TEMPLATEPATH . '/includes/functions/sidebars.php');

    Functions.php van wordpress roept Sidebars.php aan.

    <?php global $wp_query;
    $ID = $wp_query->post->ID; 
    
    $biglayout = ((bool) get_post_meta($post->ID, 'et_bigpost', true)) ? true : false; echo $post->ID;
    
    $layout = ($biglayout==true)? "big" : "small" ;
    
    if ( function_exists('register_sidebar') )
        register_sidebar(array(
            'name' => 'Sidebar',
            'before_widget' => '<div id="widgetborder"><div id="%1$s" class="widget %2$s  '.$layout.'   ">',
            'after_widget' => '</div></div></div><!-- end .widget -->',
            'before_title' => '<h3 class="widgettitle '.$layout.' ">',
            'after_title' => '</h3><div class="widgetcontent">',
        )); ?>

    Sidebars.php. Dit is het bestandje waar alles in misgaat. Hier wordt de post-id opgeroepen en deze zou de class achter de widgets in de sidebar moeten verzorgen. Bij echo $ID; wordt niets teruggegeven.

    <div id="sidebar">
    
            <?php if ( !function_exists('dynamic_sidebar') || !dynamic_sidebar('Sidebar') ) : ?>
            <?php endif; ?>
    
        </div> <!-- end #sidebar -->

    Single.php hier wordt de bovenstaande sidebar aangeroepen.

    Het gaat om deze website:
    Om de class te checken ga ik altijd naar
    Als de class zou werken, zouden de geeltjes rechts namelijk grijs moeten worden.

    Het vreemde is…als ik de code van sidebars.php volledig kopieer en tussen de code van single.php plaats, wordt de post-id wel gevonden. Maar dan worden de sidebars in de wordpress administrator niet meer herkend.

    Wie kan mij helpen?

15 reacties aan het bekijken - 1 tot 15 (van in totaal 19)
  • Verkeerd antwoord geplaatst … excuses

    Thread starter Markgoessens

    (@markgoessens)

    Hallo Xanderrem,

    Bedankt voor je reactie.
    Ik heb het zojuist geprobeerd maar dan verdwijnt de complete sidebar.

    Eigenlijk niet geheel onlogisch. ‘Sidebar’ verwijst naar de naam van de sidebar zoals deze in sidebars.php genoemd wordt: 'name' => 'Sidebar',

    Ja…dat dacht ik al, vandaar dat ik m’n
    Welk theme gebruik je? Heb je niet ergens sidebars staan in plaats van sidebar?

    Xander

    Ik begrijp even niet zo snel wat je nu wilt bereiken ?

    Want volgens mij gaat dit niet lukken wat je wilt omdat je sidebar op dat moment niet tussen de Loop zit.

    WP rent door de Loop en haalt daarmee Post ID’s op en print die op de pagina , dan zal je zien dat de Loop wordt afgesloten (standaard) en dan pas wordt de sidebar ge-include want deze heeft geen Loop nodig.

    Thread starter Markgoessens

    (@markgoessens)

    @ Xanderrem
    Ik gebruik TheStyle van Elegantthemes. Nergens anders wordt ‘sidebars’ gebruikt. Alleen dan in ‘functions.php’ om de sidebars aan te roepen.

    @ Jaja
    Daar zit wel wat in. Alhoewel dat heel jammer zou zijn, want ik zou niet weten hoe ik dit wil oplossen.
    Nou, het zit zo:
    In administrator van wordpress geef ik per post aan of dit een bigpost is of niet.
    Als iets een bigpost is, dan wordt de hele pagina in grijstinten. Zo niet, dan wordt de pagina in kleur weergegeven. Ik geef dit aan door ‘et_bigpost’ te typen met waarde 1 of 0 in de extra velden van de posts in wordpress.
    Overal binnen een post zijn de grijze kleuren zichtbaar (dus wordt de post-id opgenomen) behalve in de sidebar. Die blijft dus (en dit is het probleem) ten alle tijde in kleur.

    Weet jij hoe ik dit wel kan oplossen? Kan ik op de een of andere manier de sidebar al aanroepen binnen de loop?

    Ik kom hier straks op terug omdat ik even met iets anders bezig ben maar als ik het goed begrijp gebruik je nu Custom Fields om bijv. een naam in de Class van een div te krijgen.

    Dat is een erg verouderde methode en WP heeft hier Post Formats voor bedacht. Al was het eigenlijk een idee van Tumblr.

    Maar ik zal straks uitleggen wat je kan doen.

    Thread starter Markgoessens

    (@markgoessens)

    Hoi Jaja,

    Precies! Technisch gezien zorg ik via custom fields dat inderdaad classes bepaald worden. Class ‘big’ maakt alles in grijstinten en ‘small’ maakt alles kleur.

    Oke, nog nooit van gehoord. Ik ben blij dat je me dit wil uitleggen. Ik wacht vol spanning af 🙂 Dat die site eindelijk eens werkend wordt 🙂
    Alvast bedankt.

    Je kan twee dingen doen (a) de oude manier en (b) met Post Formats zoals het zou moeten.

    A) Je plaatst in je sidebar.php boven en onder de code van de loop. Zodat de loop weer gaat draaien voordat je de sidebar aanroept.

    B) Post Formats ,
    http://codex.wordpress.org/Post_Formats

    Het beste is dat je dan even afkijkt bij het Twenty Eleven thema want daar zitten ze standaard in, maar als je deze code zou gebruiken in je functions.php bestand dan registreer je ze: (mocht deze er nog niet staan)

    add_theme_support( 'post-formats', array( 'status', 'link' ) );

    Na het opslaan van deze code zal je zien dat je bij het aanmaken van een blog post een de rechterkant in de sidebar een optie hebt tot het bericht plaatsen in een Status of Link Post Format. Dat wil zeggen dat je bijv. bij alle Status berichten je de pagina anders kan aanpassen omdat dit in de class terecht komt.

    <div id="pos-ID" class="post-format-status">....

    Nu kun je dus eenvoudig dat specifieke bericht een andere layout geven via CSS omdat je in je CSS .post-format-status { …. } kun aanmaken.

    Maar dat is niet alles, Post Format kun je ook zijn eigen template file geven door gewoon de format-name achter de single-$format-name.php te plaatsen.
    En hiervoor moet je echt even in Twenty Eleven kijken omdat dit het beste voorbeeld is van hoe WP door de bestanden loopt.

    Wat je straks krijgt is,
    WP > nieuw bericht > Status format

    WordPress gaat zoeken naar de bestanden single-status.php en vanuit dat bestand miss. ook nog een speciale loop door loop-status.php aan te maken maar nog mooier omdat je nu een eigen template file hebt voor deze post format kun je ook gewoon een compleet eigen sidebar.php maken. bijv. sidebar-status.php en deze kun je dan weer stijlen in bijv. grijs terwijl de standaard code erin het zelfde blijft als alle andere sidebars die je straks miss. nog gaat toevoegen.

    Het enige wat hieraan jammer is is dat je (nog) niet zelf Post Formats namen kunt verzinnen maar dat je vast zit aan een 6 of 7 standaard WP formaten zoals, Gallery, Link, Aside, Status enz enz. Dus je kan niet zelf BIG format aanmaken al kun je wel voor het oog in je admin de naam van de Post Format veranderen door deze code te gebruiken in je functions.php bestand.

    //Rename Status Post_Format in admin sidebar
    function rename_post_formats( $safe_text ) {
        if ( $safe_text == 'Status' )
            return 'BIG Layout';
        return $safe_text;
    }
    add_filter( 'esc_html', 'rename_post_formats' );
    
    function live_rename_formats() {
        global $current_screen;
        if ( $current_screen->id == 'edit-post' ) { ?>
            <script type="text/javascript">
            jQuery('document').ready(function() {
                jQuery("span.post-state-format").each(function() {
                    if ( jQuery(this).text() == "Status" )
                        jQuery(this).text("BIG Layout");
                });
            });
            </script>
    <?php }
    }
    add_action('admin_head', 'live_rename_formats');
    
    //Rename Link Post_Format in admin sidebar
    function rename_again_post_formats( $safe_text ) {
        if ( $safe_text == 'Link' )
            return 'Small Layout';
        return $safe_text;
    }
    add_filter( 'esc_html', 'rename_again_post_formats' );
    
    function live_rename_again_formats() {
        global $current_screen;
        if ( $current_screen->id == 'edit-post' ) { ?>
            <script type="text/javascript">
            jQuery('document').ready(function() {
                jQuery("span.post-state-format").each(function() {
                    if ( jQuery(this).text() == "Link" )
                        jQuery(this).text("Small Layout");
                });
            });
            </script>
    <?php }
    }
    add_action('admin_head', 'live_rename_again_formats');

    Hoop dat het een beetje duidelijk wordt zo.

    Thread starter Markgoessens

    (@markgoessens)

    Hallo jaja,

    Waaw, dankjewel voor je uitgebreide uitleg op maat.
    Ik heb er gisteren en vandaag een klein beetje mee gestoeid, maar ik krijg weinig tijd aangezien op het werk veel andere projecten erdoorheen komen.

    Optie A gaat me niet lukken denk ik, aangezien ik niet weet hoe de loop code eruit ziet.
    Optie B zal me vast wel gaan lukken. Ik hoop dat ik hier straks of morgen meer tijd voor krijg.

    Ik hou je op de hoogte!
    Nogmaal, hartelijk dank.

    Thread starter Markgoessens

    (@markgoessens)

    Hmmm…’jaja’, kun je me hier nog een klein beetje verder mee helpen?

    Ik ben hier nu alweer een paar dagen mee aan het experimenteren, maar het wil me eigenlijk niet lukken.

    De code in ‘functions.php’ toevoegen is geen probleem. Ik zie de post-formats dan ook in ‘administrator’ verschijnen.
    Ik heb bijvoorbeeld van deze post een status post gemaakt: http://www.geprofessionaliseerd.com/?p=195

    In de element inspector van google chrome zie ik nu deze class verschijnen.
    Maar in de CSS kan ik overal deze class toevoegen, maar ik zie helemaal niets veranderen.

    Ook heb ik geprobeerd naast ‘single.php’ een ‘single-status.php’ toe te voegen.
    In ‘single-status.php’ heb ik alle code verwijderd, om te zien of er verandering optreed. Maar helaas blijft nog steeds alles ongewijzigd.

    Heb jij een idee wat ik verkeerd doe?

    Misschien heb ik dit verkeerd gedaan?
    Ik heb namelijk na het bekijken van een andere tutorial, aan het begin van single.php: <article <?php post_class(); ?>> toegevoegd.
    Ik zou nu in de element inspector dit moeten zien: <article class=”format-status”>
    Maar ik zie daar dus: <article class=”post-195 post type-post status-publish format-status hentry category-projecten?”> staan.
    Dit klopt toch eigenlijk ook niet he?

    Thread starter Markgoessens

    (@markgoessens)

    Oke, ik zie dat het me zojuist gelukt is, om binnen de post een wijziging aan te brengen met de post-format.

    Ik heb in single.php deze code toegevoegd: <div id="post" <?php post_class(); ?>>
    Nu ziet hij de class ‘status’ binnen ‘single.php’

    Maar nog niet binnen ‘siderbars.php’
    Dus ik wilde hier ook weer <?php post_class(); ?> in plaatsen. Maar ik zou niet weten hoe ik dit in deze code moet doen?
    Hieronder heb ik al iets geprobeerd, maar dit werkt niet. Hij zet ‘$post_class;’ niet om in ‘$layout’

    <?php global $wp_query;
    $layout = $post_class;
    
    if ( function_exists('register_sidebar') )
    	register_sidebar(array(
    		'name' => 'Sidebar',
    		'before_widget' => '<div id="widgetborder"><div id="%1$s" class="widget %2$s  '.$layout.'   ">',
    		'after_widget' => '</div></div></div>',
    		'before_title' => '<h3 class="widgettitle '.$layout.' ">',
    		'after_title' => '</h3><div class="widgetcontent">',
    	)); 
    
    if ( function_exists('register_sidebar') )
        register_sidebar(array(
    		'name' => 'Footer',
    		'before_widget' => '<div id="%1$s" class="widget %2$s">',
    		'after_widget' => '</div> <!-- end .footer-widget -->',
    		'before_title' => '<h3 class="title">',
    		'after_title' => '</h3>',
        ));
    ?>

    Hoe doe ik dit? Dat ‘widgetborder’ de class ‘format-status’ krijgt?

    Wacht even ik heb een hele domme fout gemaakt.

    Dit is echt zo dom van mij..
    Ik doe iets dat niet standaard in WP zit, maar wel iets dat ik wel zelf altijd gebruik en er dus handmatig in plaats omdat ik het Custom Post Types idee geweldig vind.

    Bekijk deze afb.

    Wat je nu als eerste moet doen is single.php dupliceren zodat je single.php + single kopie.php krijg. Dan hernoem je single kopie.php naar format.php > opslaan en verwijder je alle content-/codes uit de single.php en daarin plaats je deze code:

    <?php
    /*
     *  Redirecting to sub-templates, depending on what Post Format.
     *
     *	Redirects to [format.php] (fallback = default single.php) and [format-{post_format_name}.php].
     *
     */
    $format = get_post_format();
    get_template_part( 'format', $format );
    ?>

    Wat je nu hebt gedaan is ALLE blog posts die normaal in single.php terecht komen en daar direct door de loop vliegen om zo het juiste Post Format te kiezen onderbroken.
    Zodra we bij single.php aankomen gaan we nu eerst kijken welk Post Format het bericht heeft gekregen EN of daar een eigen template voor aangemaakt is.

    Dus daarom heb ik format.php als een soort van back-up plan gemaakt. Mocht je een Post Format hebben die geen eigen template heeft dan breekt je website niet maar dan leest deze eigenlijk gewoon de oude single.php die nu gewoon format.php heet.

    Alle andere Post Formats kun je nu een eigen template geven door alleen format-<PF-naam>.php te gebruiken en met dat template bestand kun je doen en laten wat je wilt.

    Dus je krijgt straks een lijstje:
    single.php ( redirects naar format-….php )
    format.php ( als back-up plan )
    format-status.php ( template voor alle Status Post Formats )
    format-aside.php ( template voor alle Aside Post Formats )
    ….

    Thread starter Markgoessens

    (@markgoessens)

    @ Jaja

    Ik heb gedaan wat je beschrijft, maar ik zie helaas helemaal niets veranderen.
    Ik heb uiteindelijk dus ook format-status.php gezet, en daar heb ik het volgende gezet

    <?php
    $myString = "Hoi!";
    echo $myString;
    echo "<h5>Test</h5>";
    ?>

    Puur om even te testen of er uberhaupt iets veranderd zodra ik een status post open. Maar er gebeurd helemaal niets.

    Maar ik was (zie mijn laatste post) al wat verder gekomen. Ik denk dat ik alleen nog maar in ‘sidebars.php’ ergens de volgende code moet zetten: <?php post_class(); ?>

    Om via de volgende code:

    ‘before_widget’ => ‘<div id=”widgetborder”><div id=”%1$s” class=”widget %2$s ‘.$layout.’ “>’,

    de juiste class achter ‘widget %2$s’ te krijgen

    Begrijp ik het nu net?

    Je wilt toch aan de hand van een bepaalde POST (Post Format) de sidebar (Widgets) een andere kleur geven?

    Dus:
    Hallo Wereld is de titel van een blog post in de Status Post Format.

    En als je dan op index pagina op Hallo Wereld click dan ga je naar de pagina van Hallo Wereld en krijg je daar gele Widgets in de sidebar.

    Een andere Blog Post in bijv. de Link Post Format heeft de titel Hallo Wereld Twee.

    Als je daar dan weer op click en naar de pagina van Hallo Wereld Twee gaat moeten je Widgets Grijs zien in de sidebar.

    Das toch wat je wilt of heb ik het mis?

    Thread starter Markgoessens

    (@markgoessens)

    Klopt helemaal!

    En dat lukt tot nu toe helaas nog niet.

    Hieronder staat een deel uit het bestandje ‘sidebars.php’
    Hierin zal, net zoals bij single.php, ergens <?php post_class(); ?> moeten komen te staan. Toch?
    Dit roept dan ook in ‘sidebars.php’ de post-format op. Dat moet dan vertaald worden in een class bij ‘before_widget’ ?

    Alleen is mijn PHP kennis dusdanig laag dat me dit niet lukt.

    Ik wil je ook wel de FTP inloggegevens geven, maar ik wil ook niet teveel van jouw tijd vragen.

    <?php global $wp_query;
    $ID = $wp_query->post->ID; 
    
    $biglayout = ((bool) get_post_meta($post->ID, 'et_bigpost', true)) ? true : false; echo $post->ID;
    
    $layout = ($biglayout==true)? "big" : "small" ;
    
    if ( function_exists('register_sidebar') )
        register_sidebar(array(
            'name' => 'Sidebar',
            'before_widget' => '<div id="widgetborder"><div id="%1$s" class="widget %2$s  '.$layout.'   ">',
            'after_widget' => '</div></div></div><!-- end .widget -->',
            'before_title' => '<h3 class="widgettitle '.$layout.' ">',
            'after_title' => '</h3><div class="widgetcontent">',
        )); ?>
15 reacties aan het bekijken - 1 tot 15 (van in totaal 19)
  • Het onderwerp ‘Get Post ID in wordpress sidebar wil niet lukken’ is gesloten voor nieuwe reacties.