web-dev-qa-db-ja.com

プラグインを使わずに定義済みのカスタムフィールドを追加するにはどうすればいいですか?

定義済みのカスタムフィールドを追加するスニペットを見つけようとしています。誰もが私がこれを見つけることができる方法や場所を知っていますか?

私はCustomPressでこれを実行できることを知っていますが、私はプラグインなしでこれを実行しようとしています。

2
Demilio

あらゆる種類の定義済みメタフィールド用のカスタムメタボックスの追加を見てください。

add_meta_box - ドキュメント - WordPress

メタデータも保存するために 'save_post'アクションにフックを追加する必要があります。

これは素早く簡単なバージョンです。

    add_action( 'save_post', 'your_meta_box_save' );

    add_action( 'add_meta_boxes', 'your_meta_box_add' );

function your_meta_box_add(){
        add_meta_box( 'predefined_field', 'Your Predefined Info', 'your_meta_box_html', 'post', 'normal', 'high' );
}

function your_meta_box_save( $post_id ){

    // Bail if we're doing an auto save
    if( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) return;

    // if our nonce isn't there, or we can't verify it, bail
    if( !isset( $_POST['meta_box_nonce'] ) || !wp_verify_nonce( $_POST['meta_box_nonce'], 'your_meta_box_nonce' ) ) return;

    // if our current user can't edit this post, bail
    if( !current_user_can( 'edit_post' ) ) return;

    // now we can actually save the data
    $allowed = array( 
        'a' => array( // on allow a tags
            'href' => array() // and those anchords can only have href attribute
        )
    );

    $your_predefined_value = isset($_POST['your_predefined_field']) ? $_POST['your_predefined_field'] : '';

    if( $your_predefined_value )
        update_post_meta($post_id,'your_predefined_field',$your_predefined_value);

}

function your_meta_box_html( $post ){

    wp_nonce_field( 'your_meta_box_nonce', 'meta_box_nonce' );

    //if you know it is not an array, use true as the third parameter
    $your_predefined_value = get_custom_meta($post->ID,'your_predefined_field',true);

    ?>

            <input name="your_predefined_field" id="your_predefined_field" type="text"  value="<?php echo $your_predefined_value; ?>" class="mws-textinput" />
    <?php
}

それであなたは始められるでしょう。問題がある場合はコメントを戻してください。

3
Douglas.Sesar
function add_predefined_custom_field_names( $query ) {
    $predefined = array(
        'www.cyberxoft.com'
    );

    global $table_prefix;

    $query = preg_replace('/[\r\n\t]/', ' ', $query); //minify by removing all tabs and line breaks
    $query = preg_replace('/\s+/', ' ', $query); //minify by replacing spaces, tabs and carriages to single space

    //SELECT meta_key FROM wp_postmeta GROUP BY meta_key HAVING meta_key NOT LIKE '\\_%' ORDER BY meta_key LIMIT 30
    $pattern = ("/SELECT meta_key FROM ".$table_prefix."postmeta/i");   

    if( preg_match($pattern, $query) ) {
        $keys = '';     

        foreach($predefined as $key){$keys .= (" UNION SELECT '$key' AS meta_key");}        

        $query = preg_replace('/SELECT/i', 'SELECT meta_key FROM (SELECT', $query);
        $query = preg_replace('/FROM wp_postmeta/i', ('FROM wp_postmeta'.$keys), $query);
        $query = preg_replace('/ GROUP BY/i', ')t GROUP BY', $query);
    }

    return $query;
}
add_filter('query', 'add_predefined_custom_field_names');

上記のコードをテーマのfunction.phpのどこかに追加するだけです。上記のコードを追加すると、選択するオプションの1つとして「www.cyberxoft.com」がドロップダウンに追加されます。

表示された場合は、「www.cyberxoft.com」を必要なフィールド名に置き換えて管理者ページを更新し、表示されたときに追加してくださいデフォルトの制限として設定されています。

楽しい...

この解決方法は プログラムで "add new"カスタムフィールドドロップダウンにプログラムで追加 にもあります。

0
CyberXoft