add_filter pentru the_content în functions.php nu funcționează

21 mai 2014, 10:29:38
Vizualizări: 17.9K
Voturi: 2

Încerc să adaug un filtru pentru the_content în fișierul functions.php al temei mele WordPress. Am introdus cod care ar trebui să afișeze un text simplu, dar filtrul nu se aplică.

function add_mod_hatom_data($content) {
   // $t = get_the_modified_time('F jS, Y');
   //$author = get_the_author();
   // $title = get_the_title();
   //if(is_single()) {
    echo 'perrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr';
   //   $content .= '<div class="hatom-extra"><span class="entry-title">'.$title.'</span> a fost modificat ultima dată: <span class="updated"> '.

//$t.'</span> de <span class="author vcard"><span class="fn">'.$author.'</span></span></div>';
   // }
    return $content;
    }

 add_filter('the_content', 'add_mod_hatom_data');

Am experimentat cu diferite apeluri precum:

add_filter('the_content', 'add_mod_hatom_data', 99);

Am încercat și mutarea codului în partea superioară a fișierului functions.php fără rezultat.

Este necesară activarea manuală a filtrului sau există un conflict cu alte funcții? OBSERVAȚIE: În șablonul single post am următoarea structură:

<?php get_header(); ?>      
            <div id="content" class="clearfix row">
                <div id="main" class="col-sm-8 clearfix" role="main">
                    <?php if (have_posts()) : while (have_posts()) : the_post(); ?>

                    <article id="post-<?php the_ID(); ?>" <?php post_class('clearfix'); ?> role="article" itemscope itemtype="http://schema.org/BlogPosting">

                        <header>
                            <div class="page-header clip_content single-post">
                                <div class="page-header">
                                    <h1 class="single-title-wg" itemprop="headline">
                                        <?php $category = get_the_category();
                                        if ($category[0]) {
                                          echo '<b>'.$category[0]->cat_name.' '.$post->ID.'</b>';
                                        }
                                        ?>
                                    </h1>
                                    <h4 class="single-title" itemprop="headline">
                                        <p class="lead">                                                                                                         
                                            <?php the_title(); ?>
                                        </p>
                                    </h4>
                                </div>

                                <div class="item_footer">
                                </div>            
                                <?php $category = get_the_category();
                                if ($category[0]) {?>
                                <p class="authorParagraph">
                                    <?php echo '<a href="' . get_category_link($category[0]->term_id) . '" class="clearfix">' . $category[0]->cat_name . '</a></p>';
                                    }
                                    ?>
                            </div>

                        </header> <!-- sfârșit antet articol -->

                        <footer>
                            <!-- <?php the_tags('<p class="tags"><span class="tags-title">' . __("Etichete","wpbootstrap") . ':</span> ', ' ', '</p>'); ?> -->
                        </footer> <!-- sfârșit subsol articol -->

                    </article> <!-- sfârșit articol -->

                    <?php endwhile; ?>          

                    <?php else : ?>

                    <article id="post-not-found">
                        <header>
                            <h1><?php _e("Nu a fost găsit", "wpbootstrap"); ?></h1>
                        </header>
                        <section class="post_content">
                            <p><?php _e("Resursa solicitată nu există pe acest site.", "wpbootstrap"); ?></p>
                        </section>
                        <footer>
                        </footer>
                    </article>

                    <?php endif; ?>

                </div> <!-- sfârșit #main -->

            </div> <!-- sfârșit #content -->

<?php get_footer(); ?>
4
Comentarii

Te rog să îmbunătățești sursa buclei din interiorul șablonului. Folosești funcțiile implicite WordPress the_content() pentru a obține conținutul pe front-end? Dacă nu, atunci nu este posibil să declanși acest hook. Poate că trebuie să îmbunătățești soluția ta pentru a afișa conținutul prin apply_filter. Vezi și documentația hook-ului.

bueltge bueltge
21 mai 2014 11:17:15

acel 'echo' se poate termina undeva înainte ca HTML-ul site-ului să fie afișat; încearcă să adaugi șirul la $content astfel: return 'rrr'.$content;

Michael Michael
21 mai 2014 11:28:54

Problema este că filtrul meu nu este aplicat. Am comentat codul din funcție și am pus echo doar pentru a demonstra că funcția nu este apelată în single post.

Radenko Zec Radenko Zec
21 mai 2014 12:54:05

@bueltge Bănuiesc că mergi pe drumul cel bun, dar nu sunt sigur că înțeleg. Cred că problema este legată de faptul că în șablonul de postare individuală folosesc the_post() și nu există the_content()?

Radenko Zec Radenko Zec
21 mai 2014 12:55:40
Toate răspunsurile la întrebare 3
3

Asta se întâmplă deoarece variabila '$content' este goală. Modul în care folosești acest filtru este corect. În loc să folosești 'echo', pune valorile tale în variabila '$content' și apoi 'return $content' va afișa aceste valori pe pagină. Încearcă asta:

function add_mod_hatom_data($content) {
   // $t = get_the_modified_time('F jS, Y');
   //$author = get_the_author();
   // $title = get_the_title();
   //if(is_single()) {
    $content = 'perrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr';
   //   $content .= '<div class="hatom-extra"><span class="entry-title">'.$title.'</span> a fost modificat ultima dată: <span class="updated"> '.

//$t.'</span> de <span class="author vcard"><span class="fn">'.$author.'</span></span></div>';
   // }
    return $content;
    }

 add_filter('the_content', 'add_mod_hatom_data');
21 mai 2014 11:33:37
Comentarii

Acest lucru de asemenea nu funcționează. Am comentat codul în această funcție și am pus echo pentru a demonstra că funcția nu va fi apelată. Am testat și codul tău 'perrrrr...' nu este afișat chiar dacă l-am pus în variabila $content. Bănuiesc că acest lucru este legat de faptul că în template-ul de single post am the_post() și nu the_content() sau ceva similar?

Radenko Zec Radenko Zec
21 mai 2014 12:57:28

Poți să adaugi în template-ul tău de single post codul pentru a putea vedea. (Tot codul)

Matt Royal Matt Royal
21 mai 2014 13:04:45

Sigur. Am actualizat întrebarea cu template-ul simplificat.

Radenko Zec Radenko Zec
21 mai 2014 13:10:37
1

Această parte a șablonului pentru articol individual se numește bucla (loop):

<?php if (have_posts()) : while (have_posts()) : the_post(); ?>

În interiorul buclei trebuie să apelați conținutul:

<?php the_content(); ?>

Înlocuiți șablonul pentru articol individual cu acesta și verificați dacă funcționează acum:

<?php get_header(); ?>      
<div id="content" class="clearfix row">
    <div id="main" class="col-sm-8 clearfix" role="main">
        <?php if (have_posts()) : while (have_posts()) : the_post(); ?>

        <article id="post-<?php the_ID(); ?>" <?php post_class('clearfix'); ?> role="article" itemscope itemtype="http://schema.org/BlogPosting">

            <header>

                <div class="page-header clip_content single-post">
                    <div class="page-header">
                        <h1 class="single-title-wg" itemprop="headline">
                            <?php $category = get_the_category();
                            if ($category[0]) {
                              echo '<b>'.$category[0]->cat_name.' '.$post->ID.'</b>';
                            }
                            ?>
                        </h1>
                        <h4 class="single-title" itemprop="headline">
                        <p class="lead"> <?php the_title(); ?></p></h4>
                        <p><?php the_content(); ?></p>
                    </div>

                    <div class="item_footer">
                    </div>            
                    <?php $category = get_the_category();
                    if ($category[0]) {?>
                    <p class="authorParagraph">
                        <?php echo '<a href="' . get_category_link($category[0]->term_id) . '" class="clearfix">' . $category[0]->cat_name . '</a></p>';
                        }
                        ?>
                </div>

            </header> <!-- sfârșit antet articol -->

            <footer>
                <!-- <?php the_tags('<p class="tags"><span class="tags-title">' . __("Etichete","wpbootstrap") . ':</span> ', ' ', '</p>'); ?> -->
            </footer> <!-- sfârșit subsol articol -->

        </article> <!-- sfârșit articol -->

        <?php endwhile; ?>          

        <?php else : ?>

        <article id="post-not-found">
            <header>
                <h1><?php _e("Negăsit", "wpbootstrap"); ?></h1>
            </header>
            <section class="post_content">
                <p><?php _e("Ne pare rău, dar resursa solicitată nu a fost găsită pe acest site.", "wpbootstrap"); ?></p>
            </section>
            <footer>
            </footer>
        </article>

        <?php endif; ?>

    </div> <!-- sfârșit #main -->

</div> <!-- sfârșit #content -->

<?php get_footer(); ?>
21 mai 2014 13:21:07
Comentarii

Mulțumesc, a funcționat. Am titlul și conținutul la fel, așa că trebuie doar să înlocuiesc the_title cu the_content.

Radenko Zec Radenko Zec
21 mai 2014 14:11:22
0
-1

Folosește acest filtru (the_content are un singur parametru și trebuie să folosești 1)

add_filter('the_content', 'add_mod_hatom_data', 1);
21 iul. 2020 00:35:31