是否用自定义函数替换插件函数?

时间:2016-11-05 作者:Pierre

如何用插件的自定义版本替换插件中的函数。

插件的原始功能是:

function sep_get_the_event_end_date($post = NULL) {
    $post = get_post($post);
    if ($post->post_type !== \'event_listing\') {
        return;
    }
    $event_xml = get_post_meta(get_the_ID(), \'event_meta\', TRUE);
    $xml_object = new SimpleXMLElement($event_xml);
    $end_date = isset($xml_object->end_date) ? $xml_object->end_date : \'\';
    $event_date = isset($xml_object->event_date) ? $xml_object->event_date : \'\';
    if (isset($end_date) and \'\'  $end_date and \'checked\'  $event_date) {
        $end_date = isset($xml_object->end_date) ? $xml_object->end_date : \'\';
        $end_date = new DateTime($end_date);
        $end_date = date_format($end_date, \'F d, Y\');
    } else {

        $end_date = \'\';
    }
    return apply_filters(\'sep_the_event_end_date\', $end_date, $post);
}
我想更改的日期格式$end_date. 类似“jS M Y”的东西。

我试过这个:

创建了新文件:custom-date-planner.php 并更改了日期格式。


    function custom_sep_get_the_event_end_date($post = NULL) {
        $post = get_post($post);
        if ($post->post_type !== \'event_listing\') {
            return;
        }
        $event_xml = get_post_meta(get_the_ID(), \'event_meta\', TRUE);
        $xml_object = new SimpleXMLElement($event_xml);
        $end_date = isset($xml_object->end_date) ? $xml_object->end_date : \'\';
        $event_date = isset($xml_object->event_date) ? $xml_object->event_date : \'\';
        if (isset($end_date) and \'\'  $end_date and \'checked\'  $event_date) {
            $end_date = isset($xml_object->end_date) ? $xml_object->end_date : \'\';
            $end_date = new DateTime($end_date);
            $end_date = date_format($end_date, \'d M, Y\');
        } else {

            $end_date = \'\';
        }
        return apply_filters(\'custom_sep_the_event_end_date\', $end_date, $post);
    }

接下来是我的功能。php我做到了:

// Add file
require_once(get_stylesheet_directory() . \'/public/partials/custom-date-planner.php\');

add_action( \'after_setup_theme\', \'child_theme_setup\', 100 );
function child_theme_setup() {

    remove_action( \'sep_the_event_end_date\', \'sep_get_the_event_end_date\' );

    add_action( \'sep_the_event_end_date\', \'custom_sep_get_the_event_end_date\' );
}
通过这次跑步,我得到了一个通知:Notice: Trying to get property of non-object in /private/var/www/fashion/data/web/public/wp-content/themes/furnde-child/public/partials/custom-date-planner.php on line 4

我怎样才能让它工作?

3 个回复
SO网友:Benoti

对于您的问题,我如何替换此函数。您不需要更换它。函数在返回值上有一个过滤器,而不是操作。您不需要删除它,只需过滤结果即可。

因此,您可以创建一个新函数并使用add_filter(\'sep_the_event_end_date\', \'yourfunction\'); 把这个放在你的函数中。没有加载add\\u action插件的php文件。

SO网友:Bas van Dijk

在用作替换的函数中。你没有得到post数据,或者你只是漏掉了?

post = get_post($post);

SO网友:Jory Hogeveen

看来$post 参数并不总是正确的。

也许再检查一下。

更改此项:
if ($post->post_type !== \'event_listing\') {
对此:
if ( ! isset($post->post_type) || $post->post_type !== \'event_listing\' ) {

相关推荐

如何在Functions.php中链接style.css

我是WordPress的新手;我刚开始学习WordPress。我想把风格联系起来。函数中的css。php,但我无法解决这里可能存在的问题。谁能给我指出正确的方向吗?指数php<?php get_header(); ?> <?php if ( have_posts() ) { while ( have_posts() ) { the_post();