如何将这个定制的核心函数在函数.php中转化为一个过滤器/动作?

时间:2013-06-21 作者:bigpotato

所以在模板中。php原始函数如下所示:

    function meta_form() {
        global $wpdb;
        $limit = (int) apply_filters( \'postmeta_form_limit\', 30 );
        $keys = $wpdb->get_col( "
            SELECT meta_key
            FROM $wpdb->postmeta
            GROUP BY meta_key
            HAVING meta_key NOT LIKE \'\\_%\'
            ORDER BY meta_key
            LIMIT $limit" );
        if ( $keys )
            natcasesort($keys);
与此同时,我办公室的某个人将其更改为:

    function meta_form() {
        global $wpdb;

      if ( isset($_GET[\'post\']) )
        $post_id = (int) $_GET[\'post\'];
      elseif ( isset($_POST[\'post_ID\']) )
        $post_id = (int) $_POST[\'post_ID\'];
      else
        $post_id = 0;

      if ( $post_id ) {
        $post_ = get_post($post_id);

      }

      if ($post_->post_type == \'video_photo\' ){
        $limit = (int) apply_filters( \'postmeta_form_limit\', 30 );
        $keys = $wpdb->get_col( "
            SELECT meta_key
            FROM $wpdb->postmeta
        where meta_key like \'tqmcf_%\'
            GROUP BY meta_key
            HAVING meta_key NOT LIKE \'\\_%\'
            ORDER BY meta_key
            LIMIT $limit" );
      }else{
        $limit = (int) apply_filters( \'postmeta_form_limit\', 30 );
        $keys = $wpdb->get_col( "
            SELECT meta_key
            FROM $wpdb->postmeta

            GROUP BY meta_key
            HAVING meta_key NOT LIKE \'\\_%\'
            ORDER BY meta_key
            LIMIT $limit" );
      }

        if ( $keys )
            natcasesort($keys);
我一直在做研究,看来对核心的任何更改都应该在我的主题功能中完成。php文件使用add\\u filter或add\\u action。走这条路对吗?我该怎么做?我仍然不太了解它们是如何工作的。

提前感谢您的帮助。

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

好像你问过这个问题on SO 此外,我在那里发布了以下答案:

这个meta_form 函数是不可插拔的,并且没有可用的挂钩,因此,由于不建议对核心进行黑客攻击,您将需要另一种方法。下面是一个jQuery解决方案。将代码放入functions.php 主题文件或插件中的文件:

add_action( \'admin_footer\', \'so17239871_mod_metakeyselect\' );
function so17239871_mod_metakeyselect()
{
    global $pagenow, $post_type;

    if( ! ( \'post.php\' == $pagenow && \'video_photo\' == $post_type ) )
        return;
?>
<script type="text/javascript">
jQuery(document).ready(function(){
    jQuery("#metakeyselect > option").hide();
    jQuery("#metakeyselect > option[value^=\'tqmcf_\']").show();
});
</script>
<?php
}

SO网友:s_ha_dum

这个函数中没有挂钩(我看到),您可以用它来以这种方式修改它。但是,匹配的值tqmcf_% 是由您控制的代码创建的,我非常确定,如果数据以前导下划线保存--_tqmcf_% 然后,原始不变的函数将起作用(这是首先应该做的)。

以不同的方式保存这些数据将是我解决这个特定问题的建议。

结束

相关推荐

Apply_Filters()和_Excerpt提供了意外的结果

我觉得我一定错过了一些显而易见的东西,但我似乎无法让WordPress合作。我正在用一个函数生成Facebook OG标签。除了摘录,一切都很好。自get_the_excerpt($post->ID), 有没有其他方法可以创建摘录而不必创建一个全新的循环?我觉得这太过分了。我的第一反应是apply_filters():$description = apply_filters(\'the_excerpt\', get_post($post->ID)->post_content);