0

こんにちは、私は WordPress 初心者ですので、ご容赦ください。したがって、template.php では、関数のmeta_form()機能をいくつかの条件に基づいて変更する必要があります。外観は次のとおりです。

元のコード:

    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);
?>

meta_form関数を上書きする最良の方法は何ですか? プラグインなどを作成する必要がありますか? 私はきれいな答えを見つけることができないようです。(ps このコードは私が書いたのではなく、私が修正しただけです)。

4

1 に答える 1

1

関数はプラグ可能ではなく、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
}
于 2013-06-21T17:58:53.573 に答える