2012-11-04 11 views
6

Witam zacząłem mój pierwszy plugin w wordpress po kilku pracach Dostałem uderzył w walidacji pola ..Pole Walidacja i wyświetlając błąd w wordpress niestandardowego typu postu

Problem mam pole o nazwie "preix_author_url" następnie w moim Mam plugin używać

add_action('save_post', 'my_function_name'); 

Stworzyłem przykład klasy walidacji

<?php 
class validator { 
    public static function isUrl($str = '') { 
     if(strlen($str) == 0) 
      return FALSE; 

     return preg_match('!^http(s)?://[\w-]+\.[\w-]+(\S+)?$!i',$str); 
    } 
} 

w "my_function_name()"

function my_function_name(){ 
      global $post; 
      if(defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return; 
      if(isset($_POST['post_type']) && $_POST['post_type'] == 'wallpapers'){ 
       require_once(WALLP_FILE_PATH . '/wallp-core/wallp-validator.php');     
       $validate = new validator(); 
       if(isset($_POST['preix_author_url'])){ 
        if($validate->isUrl($_POST['preix_author_url'])) 
         update_post_meta($post->ID, 'preix_author_url', $_POST['preix_author_url']); 
       } 
      } 
     } 

Teraz chcę pokazać błąd na stronie postu, jeśli zweryfikuj return false. Ale nie udało mi się wyświetlić tych błędów ani powiadomień ..

Odpowiedz

9

Więc po chwili zorientowałem się w końcu. Obiecuję, że wrócę do ciebie za 20 minut, ale nie udało mi się, ponieważ myślałem, że to takie proste !! Dowiedziałem się po przeszukaniu wszędzie, że notki admin nie działają na haczyku save_post! Oto dobre rozwiązanie twojego problemu.

//for action hooks 
add_action('save_post', 'my_function_name'); 
$validator = new Validator(); 
// called after the redirect 
add_action('admin_head-post.php', array(&$validator, 'add_plugin_notice')); 

//change your my_function_name with this 
function my_function_name() { 
    global $post; 
    if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) 
     return; 
    if (isset($_POST['post_type']) && $_POST['post_type'] == 'wallpapers') { 
     require_once(WALLP_FILE_PATH . '/wallp-core/wallp-validator.php'); 
     $validate = new validator(); 
     if (isset($_POST['preix_author_url'])) { 
      //if($validate->isUrl($_POST['preix_author_url'])) 
      //update_post_meta(
      //$post->ID, 'preix_author_url', $_POST['preix_author_url']); 
      $validator = new Validator(); 
      if (!$validator->isUrl($_POST['preix_author_url'])) { 
       $validator->update_option(1); 
       return; 
      } else { 
       update_post_meta(
         $post->ID, 
         'preix_author_url', $_POST['preix_author_url']); 
      } 
     } 
    } 
} 

//ive also revised your class 
class Validator { 
    //new isUrl validation 
    //better use filter_var than preg_match 
    function isUrl($str = '') { 
     if (filter_var($str, FILTER_VALIDATE_URL) === FALSE) { 
      return FALSE; 
     } else { 
      return TRUE; 
     } 
    } 

    //You can change the error message here. 
    //This for your your admin_notices hook 
    function show_error() { 
     echo '<div class="error"> 
     <p>Error Found!!</p> 
     </div>'; 
    } 

    //update option when admin_notices is needed or not 
    function update_option($val) { 
     update_option('display_my_admin_message', $val); 
    } 

    //function to use for your admin notice 
    function add_plugin_notice() { 
     if (get_option('display_my_admin_message') == 1) { 
      // check whether to display the message 
      add_action('admin_notices', array(&$this, 'show_error')); 
      // turn off the message 
      update_option('display_my_admin_message', 0); 
     } 
    } 
} 

Próbowałem tego na mojej osobistej stronie internetowej i działało pięknie !! Nauczyłem się też wielu rzeczy z tym!

+0

Oto działa! – loQ

+0

Dzięki w końcu działa .. :) dziękuję jeszcze raz. – user1797635

+0

czy mógłbyś go również przegłosować? również dziękuję! – loQ

Powiązane problemy