在IF函数内部无法使用Add_Filter

时间:2016-11-22 作者:Hend Ry

只有在添加新帖子时,我才想在第一次保存到数据库之前编辑内容,所以我会检查路径是否位于新帖子。php我想应用过滤器,但它不起作用。有人知道怎么解决这个问题吗?

$pagePath = parse_url( $_SERVER[\'REQUEST_URI\'] );
$pagePath = $pagePath[\'path\'];
$pagePath = substr($pagePath, 1);

if($pagePath === \'wp-admin/post-new.php\'){
    function my_filter_function_name( $content ) {
        return $content . \'text before save to db\';
    }

    add_filter( \'content_save_pre\', \'my_filter_function_name\', 10, 1 );
}

2 个回复
最合适的回答,由SO网友:GKS 整理而成

无需编写太多代码。

$pagePath = parse_url( $_SERVER[\'REQUEST_URI\'] );
$pagePath = $pagePath[\'path\'];
$pagePath = substr($pagePath, 1);
通过调用全局变量,可以轻松获取当前页面路径$pagenow.

global $pagenow; // return \'post-new.php\'
而不是使用content_save_pre 可以使用的筛选器wp_insert_post_data 更容易过滤。试试这个。

add_filter( \'wp_insert_post_data\', \'appendContent\', 99, 2 );

function appendContent( $data, $postarr ) {  

       // Retrieve referer path of current page through wp_get_referer(). 
       $referer = basename( wp_get_referer() );  // post-new.php

       if ( ! wp_is_post_revision( $postarr[\'ID\'] ) && $referer == \'post-new.php\' ) {

             $data[\'post_content\'] = $data[\'post_content\'] . \' text before save to db\';
        }
    return $data;
}
wp_insert_post_data 在插入或更新数据库之前,由wp\\u insert\\u post函数调用

SO网友:Ranuka

我不理解你的逻辑来检查这是否是第一次。如果您的逻辑正确,条件是否应在过滤器功能内。

$pagePath = parse_url( $_SERVER[\'REQUEST_URI\'] );
$pagePath = $pagePath[\'path\'];
$pagePath = substr($pagePath, 1);


function my_filter_function_name( $content ) {
    if($pagePath === \'wp-admin/post-new.php\')
    {
        return $content . \'text before save to db\';
    }
}

add_filter( \'content_save_pre\', \'my_filter_function_name\', 10, 1 );

相关推荐

Apply_Filters()对所需的参数进行切片

我正在尝试向WooCommerce订单中的每个退款行添加一个按钮(其功能超出了这个问题的范围,足以说明它需要退款id作为参数)。我发现这些行是在woocommerce\\includes\\admin\\meta Box\\views\\html订单退款中创建的。无法重写的php。然而,有一项行动:do_action( \'woocommerce_admin_order_item_values\', null, $refund, $refund->get_id() ); 这似乎非常适合我的