2016-12-14 2 views
0

J'essaie de renommer les fichiers en les téléchargeant sur WordPress et je veux qu'ils obtiennent le nom du titre de poste stérilisé. Fondamentalement, je veux faire la même chose que here, mais malheureusement, quand j'utilise le code de this réponse - Je ne reçois pas la valeur de $post variable. La seule chose que je reçois est un nom "vide" avec quelques chiffres à la fin et l'extension du fichier, par ex. "-5263.png", qui augmente avec chaque nouveau fichier. Pour une raison quelconque, je ne reçois pas la valeur $post qui me donnerait le titre du message et il change juste le nom du fichier pour ... eh bien, rien et juste ajouter quelques chiffres à la fin, de sorte qu'il ne surpasse pas les autres fichier.WordPress; Renommer le fichier lors du téléchargement

Je voudrais vraiment savoir quel est le problème avec mon code:

function new_filename($filename, $filename_raw) { 
     global $post; 
     $info = pathinfo($filename); 
     $ext = empty($info['extension']) ? '' : '.' . $info['extension']; 
     $new = $post->post_title; 
     if ($new != $filename_raw) { 
       $new = sanitize_file_name($new); 
     } 
     return $new . $ext; 
} 

add_filter('sanitize_file_name', 'new_filename', 10); 

Nous vous remercions d'avance pour votre aide.

Répondre

0

J'ai fait un plugin il ya longtemps appelé File Renaming on Upload qui peut vous aider à ce sujet, mais si vous cherchez de l'aide avec votre code, je peux dire que vous pouvez essayer une approche différente pour obtenir la variable post. Essayez ceci à la place:

function get_post() { 
    global $post; 
    $post_obj = null; 

    if(!$post){ 
     $post_id = isset($_REQUEST['post_id']) ? $_REQUEST['post_id'] : false; 
     if ($post_id && is_numeric($post_id)) { 
      $post_obj = get_post($post_id); 
     } 
    }else{ 
     $post_obj = $post; 
    } 

    return $post_obj; 
} 

Une fois que vous obtenez votre variable de post, vous n'avez pas besoin d'utiliser le post_title comme ça. Vous pouvez utiliser

$post->post_name 

Et vous n'avez pas besoin d'utiliser sanitize_file_name() fonction