更改子主题函数中的父主题文件函数。php

时间:2017-11-13 作者:nameless

我试图了解动作挂钩和过滤器是如何工作的,我想编辑这个示例

此函数位于父主题框架php文件中:

public function formatArticleCat01( $show_category = false, $shorten_text_chars = 300, $show_date = true, $show_comments = false, $show_author = false, $show_views = false ) {
$sFigure = ( $this->article_thumb != \'\' ) ? \'<div class="col-sm-6 col-md-4 col-lg-5">\'. $this->getReviewScore() .\'\' .$this->getFigureSmall() .\'</div><div class="col-sm-6 col-md-8 col-lg-7">\' : \'<div class="col-xs-12">\';
return \'<div class="row clearfix">
            <!-- start:article.default -->
            <article class="def">
                \'. $sFigure .\'
                    <div class="entry">
                        \'. ( $show_category ? $this->getCategoryLabelSpan() : \'\' ) .\'
                        <h3 itemprop="name">
                            <a itemprop="url" href="\'. get_permalink($this->article_link) .\'">\'. $this->article_title .\'</a>
                        </h3>
                        <div class="entry-meta">
                            \'. ( $show_date ? $this->getPostDateMeta() : \'\' ) .\'
                            \'. ( $show_author ? $this->getAuthorMeta() : \'\' ) .\'
                            \'. ( $show_comments ? $this->getCommentCountMeta() : \'\' ).\'
                            \'. ( $show_views  ? $this->getViewsLabelSpan() : \'\' ) .\'
                        </div>
                        <div class="text hidden-xs">
                            \'. MipThemeFramework_Util::ShortenText($this->article_content, $shorten_text_chars) .\'
                        </div>
                        \'. $this->getStarRatingLabelSpan() .\'
                    </div>
                </div>
            </article>
            <!-- end:article.default -->
        </div>\';
}
假设我想在这一行向div添加另一个类

$sFigure = ( $this->article_thumb != \'\' ) ? \'<div class="col-sm-6 col-md-4 col-lg-5">\'. $this->getReviewScore() .\'\' .$this->getFigureSmall() .\'</div><div class="col-sm-6 col-md-8 col-lg-7">\' : \'<div class="col-xs-12">\';
它应该和过滤器挂钩一起工作,对吗?有人能帮助我理解过滤器挂钩的功能并使这个示例起作用吗

我不知道要在我的子主题函数中添加什么。php文件,以防止在更新主题时丢失更改。

希望有人能帮我

谢谢

2 个回复
SO网友:Johansson

过滤器用于修改数据,但操作就像公共汽车站,您可以在那里将函数附加到主题,当脚本达到特定状态时,它们将运行。

要使用上述任何一项,必须首先在某处声明它们。让我们从的codex页面看一下这个示例apply_filters:

// Function that modifies the data
function example_callback( $string, $arg1, $arg2 ) {
    // (maybe) modify $string
    return $string;
}
// The filter used by user
add_filter( \'example_filter\', \'example_callback\', 10, 3 );

// Declaration of the filter by the person who 
$value = apply_filters( \'example_filter\', \'filter me\', $arg1, $arg2 );
现在可以看到,通过使用$data = apply_filters( ... ). 然后,在代码中的其他地方使用add_filter( ... ). 因此,如果没有声明附加到该数据的过滤器,则无法过滤该数据段。

现在谈谈你的代码。看起来你从一个类中获取了那段代码。大多数优秀的开发人员在编写代码时都会使用可插入函数。这意味着,它们定义其类和函数如下:

if ( ! class_exists( \'some_class\' ) {
    class some_class {
        // Class code here
    }
}
这允许用户通过自己定义来重写特定的类或函数。看看你的代码。如果遵循相同的实践,那么您可以将该类复制到您孩子的主题functions.php 文件,并修改所需的部分。

SO网友:Digvijayad

通俗地说,过滤器用于修改或更改现有数据,例如帖子的内容或任何其他定义的值。当一个特定的东西运行时,手上的动作会做一些事情。

对于操作和筛选器,必须首先声明它们,即对于筛选器,必须定义可以使用筛选器更改的内容,对于操作挂钩,必须定义将导致操作运行的内容。

Note:在你上面的例子中,没有提到任何filter, 因此,修改该函数的唯一方法是将其复制到子主题的function.php 手动归档并添加类。

现在,为了了解过滤器的工作原理,让我们看一个示例,

假设您要打印作者的姓名,则可以应用filter 这样,如果您想更改作者的姓名,就可以在不修改原始函数的情况下进行更改。

/*
 * - \'change_author_name_filter\' is the filter hook $tag
 * - \'Digvijayad\' is the value being filtered
$author_name = apply_filter(\'change_author_name_filter\', \'Digvijayad\');
现在如果您使用$author_name 然后它将使用\'Digvijayad\' 作为默认作者名称。但是,如果您添加如下所示的过滤器。

// filter call_back
function change_author_name( $author_name ){
    //here you can do whatever you want to author name;
    // you can modify it or replace it altogether.

    // To print \'Digvijayad & Jack Johansson\' you can do the following.
    // $author_name .= \' & Jack Johansson\';

    // or you can replace it altogether. 
    $author_name = \'Jack Johansson\';

    return $author_name;
}
add_filter(\'change_author_name_filter\', \'change_author_name\', 10, 1);
现在如果您使用$author_name 它将被替换为\'Jack Johansson\'

至于行动,当事情完成时,它们会触发一种反应。让我们以警报为例。首先设置闹钟的时间,当到达时间时,闹钟会播放声音告诉你时间到了。

现在,通过行动,你可以告诉闹钟在到达时间时也做其他事情,比如“给朋友打电话”。现在,让我们将其放入代码中。

假设您已经设置了时间,现在您设置了do_action 时机成熟时,钩子会有所作为。

//code when time is checked
// and now time is up
do_action(\'time_is_up\'); //basically it will perform this action when ever the time is up
现在,您可以向该特定事件添加更多操作。根据类比,现在可以告诉它在运行“time\\u is\\u up”操作时给朋友打电话。

// Now Whenever \'time_is_up\' runs this function will run as well
function call_friend(){
    //code for calling a friend;
    echo \'calling friend\';
}
add_action(\'time_is_up\', \'call_friend\', 10);
类似地,您可以向同一个\'time_is_up\' 行动挂钩。例如,也许你也想给你的家人打电话

function call_my_family(){
   //code to call my family
   echo \'calling family\';
}
add_action(\'time_is_up\', \'call_my_family\', 10);
希望这个简单的解释能消除您对操作和过滤器的混淆。

更多阅读,你可以阅读Tom McFralin\'s 关于操作和筛选器的文章。

结束

相关推荐

使用Functions.php的出列脚本

您好,我正在尝试将在我的队列中找到的脚本“jquery.favorite.js”退出队列。php:// WP_ENQUEUE_SCRIPTS static function wp_enqueue_scripts_callback() { global $javo_tso; $javo_register_scripts = Array( \'oms.min.js\'