将以下代码移入函数的最佳实践是什么?

时间:2017-06-16 作者:Zach Smith

我已经为我的page.php 文件,该文件确定内容是否具有readmore标记,然后我使用get_extended 功能:

$content_arr = get_extended ( $post->post_content );

            if( strpos( get_the_content(), \'<span id="more-\' ) == true ) {
                echo wpautop($content_arr[\'main\']);
                echo \'<div class="morecontent">\'. wpautop($content_arr[\'extended\']).\'</div>\';
            }
            else {
                the_content();
            }
我认为使用filter 命令,例如:

    function my_function_name($content) { 
            $content_arr = get_extended ( $content );

            if( strpos( $content, \'<span id="more-\' ) == true ) {
                echo wpautop($content_arr[\'main\']);
                echo \'<div class="morecontent">\'. wpautop($content_arr[\'extended\']).\'</div>\';

            //return $content
            }
            else {
                return $content;
            }
        }

    }

    add_filter(\'the_content\', \'my_function_name\', 1)
但我对如何更改此代码以使用传入$content, 由于我的原始代码是对内容的回应,在我的函数中,我需要返回内容,所以我迷路了。这是我第一次在WP中构建功能,我正在寻找一些帮助来处理我正在寻找的内容。

1 个回复
SO网友:hwl

我将在这里添加数字,使其更加清楚。即使当我读到它时,知道每一个片段的意思,它也可能会在语义上迷失方向。

Your original function 正在呼叫(1)$post->post_content 来自对象,并根据条件,回显函数中返回的内容或内容(2)the_content(), 这只是(1)$post->post_content 完成(3)后get_the_content() 和(2)the_content().

当你看的时候at the source of (3)get_the_content() 您可以看到(1)发生了什么$post->post_content 在达到(2)之前the_content()

Your second function 正在接收(1)$post->post_content after 已完成(3)get_the_content(), 进入(2)the_content() 然后在回显之前对其应用更改。

(4)apply_filters(\'the_content\'... 你正在和你的(5)add_filter(\'the_content\'... 位于line 240 of post-template.php 函数末尾(2)the_content() 调用函数(3)get_the_content() 正在检索的(1)$post->post_content 从当前$post 对象

(看每一件作品时,它的内容、内容、内容听起来都不那么响亮)

对于第二个函数,您需要返回(6)$content 如果希望函数有内容(2)the_content() 显示。在模板中,您只需使用(2)the_content(), 当您的条件被应用时(由(4)apply_filters(\'the_content\'... 就在(2)之前the_content() 返回。

我会添加一个if ( [is_page()][3] && [is_main_query()][3] ) {} 第二个函数中的包装器,所以它不会根据需要应用于非页面循环或子查询。

BUT 在我看来,首先要检查的是修改原来的函数,使其使用(3)get_the_content() 代替(1)$post->post_content 确保您可以在该函数完成它的工作(这就是您现在正在做的)后进行挂钩,而不会丢失预期的结果。

伙计,我希望这很清楚。

查看链接以查看每个链接之间的关系。这真的,真的,有助于理解每一个片段,让你知道你在事件链中的位置,以及你为什么在这里或那里上钩等等。

结束

相关推荐

Caching the_content calls

我正在编写一个名为Tiny cache的非常小的缓存插件。它只能缓存the_content() 我认为,在页面加载过程中,生成调用所需的时间最长。我能够钩住\\u内容并将其存储在对象缓存中。这个插件如何服务于缓存的内容?如何停止处理\\u内容筛选器?remove_all_filters() 会进一步摧毁一切the_content() 呼叫。也许可以把过滤器藏起来,以后再恢复?非常感谢。