0

リンクに追加されたときにメタボックスの値を保存する方法はありますか? これが私のコードです:

<?php
/*
Plugin Name: Link Date
Plugin URI: http://
Description: Adds links date field.
Version: None
Author: Auth
Author URI: http://
*/

add_action( 'add_meta_boxes', 'link_date_add' );
function link_date_add()
{
    add_meta_box( 'link-date-meta-box', 'Link Date', 'link_date', 'link', 'normal', 'high'     );
    }


function link_date( $post )
{
    $values = get_post_custom( $post->ID );
    $date = isset( $values['link_date_text'] ) ? esc_attr( $values['link_date_text'][0] ) : '';
    wp_nonce_field( 'my_link_date_nonce', 'link_date_nonce' );
    var_dump($post);
    ?>
<p>
    <label for="link_date_text">Link Date</label>
    <input type="text" name="link_date_text" id="link_date_text" value="<?php echo $date; ?>" />
</p>

<?php
}


add_action( 'save_post', 'link_date_save' );
function link_date_save( $post_id )
{
    if( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) return;

    if( !isset( $_POST['link_date_nonce'] ) || !wp_verify_nonce( $_POST['link_date_nonce'], 'my_link_date_nonce' ) ) return;

    if( !current_user_can( 'edit_post' ) ) return;

    $allowed = array(
        'a' => array(
        'href' => array() // and those anchords can only have href attribute
    )
);


if( isset( $_POST['link_date_text'] ) )
    update_post_meta( $post_id, 'link_date_text', wp_kses( $_POST['link_date_text'], $allowed ) );


}

?>

このコードは、投稿タイプが「投稿」に変更されたときに機能しますが、何らかの理由でデータを「リンク」タイプの投稿として保存しません。

投稿タイプが「投稿」に設定されているときにこのフィールドからいくつかのデータを保存し、コードで投稿タイプを「リンク」に更新し、さらにデータベース (wp_postmeta) を更新して ID をリンクの ID に置き換えました。その後、このデータはリンクのメタボックスに表示されましたが、それでもボットはこのメタボックスの値を更新できました。

4

2 に答える 2

1

答えは、ここで完全な結果を表示する代わりに、add_action('edit_link','save_data')MetaBoxリンクを使用することです。add_option('name_of_option')add_post_meta

于 2013-03-05T04:25:42.997 に答える
0

いくつかの実験の後、リンクマネージャーのカスタムメタボックスからデータをポストメタキー/値(wp_postmeta)としてdbに保存する方法を見つけました。誰かが必要な場合、ここに実用的な例があります:

action( 'add_meta_boxes', 'add_link_date' );
function add_link_date()
{
    add_meta_box( 'link-date-meta-box', 'Link Date', 'link_date', 'link', 'normal', 'high' );
}

function link_date( $link )
{
    $values = get_post_custom( $link->link_id );
    $date = isset( $values['link_date'] ) ? esc_attr( $values['link_date'][0] ) : '';
    wp_nonce_field( plugin_basename( __FILE__ ), 'link_date_nonce' );
?>
<p>
    <label for="link_date_text">Link Date</label>
    <input type="text" name="link_date_text" id="link_date_text" value="<?php echo $date; ?>" />
</p>

<?php
}


add_action( 'edit_link', 'myplugin_save_postdata' );

function myplugin_save_postdata( ) {
    if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE )
        return;

    if ( !isset( $_POST['link_date_nonce'] ) || !wp_verify_nonce( $_POST['link_date_nonce'], plugin_basename( __FILE__ ) ) )
        return;

    $link_id = $_POST['link_id'];
    $linkDate = sanitize_text_field( $_POST['link_date_text'] );

    add_post_meta( $link_id, 'link_date', $linkDate, true ) or
    update_post_meta( $link_id, 'link_date', $linkDate );
}
于 2013-03-05T15:48:01.213 に答える