0

投稿コンテンツからカスタムフィールドに最初のリンクを追加しようとしています。何かがおかしいので、私はそれを機能させようと試みてきましたが、運がありません。「リンク」カスタムフィールドにリンクを追加するにはどうすればよいですか?

add_action( 'publish_post', 'check_post' );
function check_post( $post_id ) {
$user_info = get_userdata(1);

    function get_first_link() {

        global $post, $posts;
        preg_match_all('/href\s*=\s*[\"\']([^\"\']+)/', $post->post_content, $links);
        return $links[1][0];

    }
    $first_link = get_first_link();

    add_post_meta($post_id, 'link', $first_link, true);
    add_post_meta($post_id, 'users', $user_info->user_login, true);
}

編集私はそれを途中で動作させました。URLは保存されますが、投稿が公開されたときには保存されません。更新時に保存します。何を使う必要がありますか?publish_postを使用してみましたが、更新時にURLも保存されました。

add_action( 'save_post', 'my_save_post', 10, 2 );
function my_save_post( $post_id, $post ) {
if ( wp_is_post_revision( $post_id ) )
    return;

$matches = array();
preg_match_all( '/href\s*=\s*[\"\']([^\"\']+)/', $post->post_content, $matches );

$first_link = false;
if ( ! empty( $matches[1][0] ) )
    $first_link = $matches[1][0];

$user_info = get_userdata(1);

$meta_link = $_POST['link'];

$args = array(
  'post__not_in'=> array($id),
  'post_type' => 'post',
  'post_status' => array('publish'),
  'meta_query' => array(

      array(
    'key' => 'link',
    'value' => $first_link,
    'compare' => '='
      )       
  )
);
$existingMeta = get_posts( $args );

if(empty($existingMeta)){
    //Go ahead and save meta data
        update_post_meta( $post_id, 'link', esc_url_raw( $first_link ) );
    update_post_meta($post_id, 'users', $user_info->user_login);
}else{
    //Revert post back to draft status
    update_post_meta( $post_id, 'link', $existingMeta[0]->ID );
        update_post_meta($existingMeta[0]->ID, 'users', $user_info->user_login);

    //Now perform checks to validate your data. 
       //Note custom fields (different from data in custom metaboxes!) 
       //will already have been saved.
        $prevent_publish= true;//Set to true if data was invalid.
        if ($prevent_publish) {
        // unhook this function to prevent indefinite loop
        remove_action('save_post', 'my_save_post');

        // update the post to change post status
        wp_update_post(array('ID' => $post_id, 'post_status' => 'draft'));

        }

}
}
4

1 に答える 1

1

どうぞ:

add_action( 'save_post', 'my_save_post', 10, 2 );
function my_save_post( $post_id, $post ) {
    if ( wp_is_post_revision( $post_id ) )
        return;

    $matches = array();
    preg_match_all( '/href\s*=\s*[\"\']([^\"\']+)/', $post->post_content, $matches );

    $first_link = false;
    if ( ! empty( $matches[1][0] ) )
        $first_link = $matches[1][0];

    update_post_meta( $post_id, 'link', esc_url_raw( $first_link ) );
}
于 2012-10-11T07:42:30.580 に答える