2017-05-22 2 views
2

J'ai rencontré une petite situation qui est, espérons-le, possible de résoudre. Mon but est de prendre un fichier XML existant du serveur, de l'analyser, puis de l'injecter comme une liste dans l'éditeur WYSIWYG original de Wordpress afin que le propriétaire du site ait la liste disponible lorsqu'il écrit un nouveau message. En ce moment, j'ai ce code dans mon wp-admin/fichier modifier-form-advanced.php:Parse XML dans Wordpress WYSIWYG éditeur SEULEMENT pour les messages

/** 
* Fires after the title field. 
* 
* @since 3.5.0 
* 
* @param WP_Post $post Post object. 
*/ 
do_action('edit_form_after_title', $post); 

if (post_type_supports($post_type, 'editor')) { 
?> 
<div id="postdivrich" class="postarea<?php if ($_wp_editor_expand) { echo ' wp-editor-expand'; } ?>"> 
<?php 

/** LOAD XML FROM SERVER AND PARSE AS UL INTO EACH NEW WP POST **/ 
    $xml = simplexml_load_file('../my-folder/file.xml'); 

    $product = "<br/><br/><h2 style='text-align:center; color:#003300;'><u>Products Available Now</u></h2><br/><ul style='text-align:center; list-style:none; color:#003300;'>"; 
    foreach($xml as $value) { 
      $product .= "<li>"; 
      $product .= $value->Description .= " $"; 
      $product .= $value->Price .= "/"; 
      $product .= $value->QtyUnit .= "\n"; 
      $product .= "</li>"; 
     }; 
?> 


<?php wp_editor($product, 'content', array(
    '_content_editor_dfw' => $_content_editor_dfw, 
    'drag_drop_upload' => true, 
    'tabfocus_elements' => 'content-html,save-post', 
    'editor_height' => 300, 
    'tinymce' => array(
     'resize' => false, 
     'wp_autoresize_on' => $_wp_editor_expand, 
     'add_unload_trigger' => false, 
    ), 
)); ?> 

Bien qu'il fonctionne, cela provoque des problèmes de couple.

1) Il injecte les données dans chaque éditeur WYSIWYG, y compris les pages, que je voudrais éviter. Le contenu ne devrait apparaître que dans les éditeurs de post si possible.

2) Cela provoque un bogue assez sérieux qui efface tout sauf la liste à chaque fois que cette page admin est rechargée. Je ne peux pas enregistrer de brouillons ou modifier des publications ou des pages à moins que je garde cette session ouverte dans le navigateur pendant le processus d'édition.

Vous ne savez pas si ces problèmes peuvent être résolus, mais toute aide est sincèrement appréciée !!

Répondre

2

Vous devriez never modify WP core files. Il est conseillé que vous update or restore les fichiers d'origine.

Ce que vous avez besoin peut être réalisé avec ce petit plugin:

<?php 
/** 
* Plugin Name: Default Post Content 
*/ 

add_action('load-post-new.php', 'new_post_so_44123076'); 

function new_post_so_44123076() { 
    # Only load if post type not defined (only occurs for Posts) 
    if(isset($_GET['post_type'])) 
     return; 
    add_filter('default_content', 'default_content_so_44123076'); 
} 
function default_content_so_44123076($content) { 
    # Build your own custom content 
    $content = "My html content."; 
    return $content; 
} 

Faire un dossier pour le plug-in, placez le code dans un fichier (custom-content.php) et mettre le XML dans le même dossier.

Il peut être récupéré comme ceci:

$xml = plugins_url('/file.xml', __FILE__); 
+1

Cela a fonctionné à merveille, je vous remercie beaucoup! J'ai restauré le fichier original et personnalisé le code du plugin. Indique un chemin absolu vers le fichier XML car il doit se trouver dans un dossier spécifique sur le serveur. Vraiment apprécier l'aide! –