帮助:点击已发布按钮后,将WP与原始PHP代码集成

时间:2020-04-29 作者:XATA

大家好,让我打开,我不擅长两种Wp编码,我想集成我的Wp站点,这样一旦点击发布/更新按钮,它就会自动将外部mp3文件导入到我的服务器,并将外部mp3链接更改为刚刚导入到我的服务器的,但是这已经完成,下面是我使用的代码,尽管它是一个插件。

class DX_Auto_Save_Images{

    function __construct(){     

        //filter and action hook
        add_filter( \'content_save_pre\',array($this,\'post_save_images\') );   //save images
        add_action( \'admin_menu\', array( $this, \'menu_page\' ) );        //menu page
        add_filter( \'intermediate_image_sizes_advanced\', array( $this, \'remove_tmb\' ) );    //remove tmb
        add_action( \'submitpost_box\', array( $this, \'submit_box\' ) );   //submit_box
        add_action( \'submitpage_box\', array( $this, \'submit_box\' ) );   //submit_box
    }



    //save post exterior images
    function post_save_images( $content ){
        if( ($_POST[\'save\'] || $_POST[\'publish\']) && ($_POST[\'DS_switch\']!=\'not_save\') ){
            set_time_limit(240);
            global $post;
            $post_id=$post->ID;
            $preg=preg_match_all(\'/<a.*?href="(.*?)"/\',stripslashes($content),$matches);
            if($preg){
                $i = 1;
                foreach($matches[1] as $image_url){
                    if(empty($image_url)) continue;
                    $pos=strpos($image_url,get_bloginfo(\'url\'));
                    if($pos===false){
                        $res=$this->save_images($image_url,$post_id,$i);
                        $replace=$res[\'url\'];
                        $content=str_replace($image_url,$replace,$content);
                    }
                    $i++;
                }
            }
        }
        remove_filter( \'content_save_pre\', array( $this, \'post_save_images\' ) );
        return $content;
    }



    //save exterior images
    function save_images($image_url,$post_id,$i){
        $file=file_get_contents($image_url);

                $_filter = true; // For the anonymous filter callback below.
add_filter( \'upload_dir\', function( $arr ) use( &$_filter ){
    if ( $_filter ) {


         $arr[\'path\'] = $arr[\'basedir\'] . \'/music\' .$arr[\'subdir\'];
        $arr[\'url\'] = $arr[\'baseurl\'] . \'/music\' .$arr[\'subdir\'];



      //  $folder = \'/org_logos\'; // No trailing slash at the end.
      //  $arr[\'path\'] .= $folder;
      // $arr[\'url\'] .= $folder;
      // $arr[\'subdir\'] .= $folder;




        /*THE BELOW IS FOR IS TO UPLOAD IT TO MUSIC CATEGORY WITHOUT YEAR AND MONTH BY ENTERMASTER. THIS SCRIPT IS WORKING FINE
        $arr[\'path\'] = $arr[\'basedir\'] . \'/music\';
        $arr[\'url\'] = $arr[\'baseurl\'] . \'/music\';
        $arr[\'subdir\'] = \'/music\';
        */
    }

    return $arr;
} );

        $filename=basename($image_url);
        $options = get_option( \'dx-auto-save-images-options\' );



        if( $options[\'chinese\']==\'yes\' ){
          preg_match( \'/(.*?)(\\.\\w+)$/\', $filename, $match );
          $im_name = md5($match[1]).$match[2];      
        }
        else $im_name = $filename;
        $res=wp_upload_bits($im_name,\'\',$file);
    //  $res=wp_upload_bits($im_name,\'\',$file);
    //  $attach_id = $this->insert_attachment($res[\'file\'],$post_id);
    //  if( $options[\'post-tmb\']==\'yes\' && $i==1 ){
        //  set_post_thumbnail( $post_id, $attach_id );
    //  }
        return $res;
        $_filter = false; // Disables the filter.
    }

    //insert attachment
    function insert_attachment($file,$id){
    //  $dirs=wp_upload_dir();
        $filetype=wp_check_filetype($file);
/*      $attachment=array(
        //  \'guid\'=>$dirs[\'baseurl\'].\'/music/\'._wp_relative_upload_path($file),
            \'post_mime_type\'=>$filetype[\'type\'],
            \'post_title\'=>preg_replace(\'/\\.[^.]+$/\',\'\',basename($file)),
            \'post_content\'=>\'\',
            \'post_status\'=>\'inherit\'
        ); */
    //  $attach_id=wp_insert_attachment($attachment,$file,$id);
    //  $attach_data=wp_generate_attachment_metadata($attach_id,$file);
    //  wp_update_attachment_metadata($attach_id,$attach_data);
    //  return $attach_id;
    }

    //menu page
    function menu_page(){
        add_menu_page( \'DX-auto-save-mp3\',\'Auto Import Mp3 File locally\', \'manage_options\', \'DX-auto-save-mp3\', array( $this, \'options_form\' ), plugins_url( \'icon.png\', __FILE__ ) );
    }

    //options form
    function options_form(){
        $options = $this->save_options();
        include( \'options-form.php\' );
    }

    //form bottom action
    function form_bottom(){
?>
    <div id="form-bottom" style="width:650px;border:1px dotted #ddd;background-color:#f7f7f7;padding:10px;margin-top:20px;">
        <p>For more coding by entermaster visit: <a href="https://www.gidiportal.com/" target="_blank">https://www.gidiportal.com</a></p>

    </div>  
<?php
    }

    //save options
    function save_options(){
        if( $_POST[\'submit\'] ){
            $data=array(
                \'tmb\' => $_POST[\'tmb\'],
                \'chinese\' => $_POST[\'chinese\'],
                \'switch\' => $_POST[\'switch\'],
                \'post-tmb\' => $_POST[\'post-tmb\']
            );
            update_option( \'dx-auto-save-images-options\', $data );
        }
        return get_option( \'dx-auto-save-images-options\' );
    }

    //remove tmb
    function remove_tmb( $sizes ){
        $options = get_option( \'dx-auto-save-images-options\' );
        if( $options[\'tmb\']==\'yes\' ){
            $sizes = array();
        }
        return $sizes;
    }

    //get_sample_permalink_html
    function submit_box(  ){
        $options = get_option( \'dx-auto-save-images-options\' );
        if( $options[\'switch\'] == \'yes\' ){
            echo \'<span style="padding-bottom:5px;display:inline-block;"><input type="checkbox" name="DS_switch" value="not_save"/> 不保存远程图片.</span>\';
        }
    }

}

//new
new DX_Auto_Save_Images();
虽然我修改了一个插件来获得这个结果。

现在,我想将这段代码集成到我已经拥有的ID3 php音乐脚本中,这样我就可以更改专辑的艺术,歌曲的标题和艺人的名字将与wp帖子标题上的完全匹配,然后,wp内容中导入的外部url将通过此php脚本,一旦点击发布按钮,它将只在后端工作,并更改wordpress编辑器上的链接。下面是php脚本,无论脚本的php部分如何,如果我在浏览器上运行它,它都可以正常工作,这只是我想要与wp集成以共同工作的脚本的索引。

<?php
error_reporting(0);
require ( \'getid3/getid3.php\' ) ;

require ( \'getid3/join.php\' ) ;


if( isset($_POST[\'submit\'])){
$now = time() ;
$default_mp3_directory =  "../wp-content/uploads/music/";
$default_album = "Example.com";
$default_year = date("Y", $now);
$default_genre = "Example.com";
$default_producer = \'\';
$default_cover = \'./music.jpg\';
$shownUrl = \'https://www.Example.com/wp-content/uploads/music/\';
# To the real uploads

$mp3_filepath = trim($_POST[\'url\']);
$mp3_songname = trim($_POST[\'title\']);
$mp3_comment = "Downloaded from Example.com";;
$mp3_artist = trim($_POST[\'artiste\']);
$artiste = $mp3_artist;
$pFilename = trim($_POST[\'filename\']);
$mp3_filename = empty( $pFilename ) ? $mp3_artist.\' - \'.$mp3_songname : $pFilename;
$mp3_album = empty ( $_POST[\'album\'] )  ? $default_album : trim ( $_POST[\'album\'] );
$mp3_year = empty ( $_POST[\'year\'] ) || !is_numeric($_POST[\'year\']) || strlen($_POST[\'year\']) != 4 ? $default_year : $_POST[\'year\'];
$mp3_genre = empty ( $_POST[\'genre\'] ) ? $default_genre : $_POST[\'genre\'];
$extra = array ( \'year\' => $mp3_year, \'genre\' => trim($_POST[\'genre\']), \'album\' => trim($_POST[\'album\']), \'producer\' => ! empty ( $_POST[\'producer\']) ? trim($_POST[\'producer\']) : $default_producer );
$error = \'\';

# Checking the mp3

if( !filter_var($mp3_filepath, FILTER_VALIDATE_URL)){
$error .= \'Invalid File URL<br>\';
} else if ( empty($mp3_filename) OR empty ($mp3_songname) OR empty($mp3_artist)){
$error .= "Fields Marked * Are Required<br>";
} else if ( !file_exists($default_cover) ) {
$error .= \'The Photo Cover Has Not Been Uploaded\';
} else {
$timeFolder .= date(\'Y\', $now) . \'/\' . date(\'m\', $now) . \'/\';
if(!file_exists($default_mp3_directory . $timeFolder)){ mkdir($default_mp3_directory . $timeFolder, 0777, true); }
$invalidchars = array("\'", \'"\', \'.\', \',\');
$storeName = str_replace($invalidchars, \'\', $mp3_filename); // . \'_[Example.com].mp3\';
$storeName = preg_replace(\'/[^A-Z-a-z0-9\\-_]/\', \'_\', $storeName);
$storeName = preg_replace("/_{2,}/", "_", $storeName);
$storeName .= \'_Example.com_.mp3\';
$sname = $default_mp3_directory . $timeFolder . $storeName;
if (file_exists($sname) ) {
$error = \'File Has Alread Been Uploaded As <a href="\' . $shownUrl . $timeFolder . $storeName . \'">\' . $storeName . \'</a>\';
} else {
if(copy($mp3_filepath, $sname)){
# Rewrite tags
$mp3_tagformat = \'UTF-8\';
$mp3_handler = new getID3;
$mp3_handler->setOption(array(\'encoding\'=>$mp3_tagformat));



//Add audio file

$tmp_name= "tmp/$storeName";

copy($sname,$tmp_name);

//$file_go_in[] = "voice.mp3";
$file_go_in[] = $tmp_name;
$file_go_in[] = "voice.mp3";
$file_go_out = $sname;

merge_mp3($file_go_out,$file_go_in);

unlink($tmp_name);





# The writer class
require ( \'getid3/write.php\' ) ;

$mp3_writter = new getid3_writetags;


$mp3_writter->filename       = $sname;
$mp3_writter->tagformats     = array(\'id3v1\', \'id3v2.3\');
$mp3_writter->overwrite_tags = true;
$mp3_writter->tag_encoding   = $mp3_tagformat;
$mp3_writter->remove_other_tags = true;

$mp3_data[\'title\'][]   = $mp3_songname.\' | Example.com\';
$mp3_data[\'artist\'][]  = $mp3_artist;
$mp3_data[\'album\'][]   = $mp3_album;
$mp3_data[\'year\'][]    = $mp3_year;
$mp3_data[\'genre\'][]   = $mp3_genre;
$mp3_data[\'comment\'][] = $mp3_comment;
$mp3_data[\'attached_picture\'][0][\'data\'] = file_get_contents($default_cover);
$mp3_data[\'attached_picture\'][0][\'picturetypeid\'] = "image/jpeg";
$mp3_data[\'attached_picture\'][0][\'description\'] = "Downloaded from Example.com";
$mp3_data[\'attached_picture\'][0][\'mime\'] = "image/jpeg";
$mp3_writter->tag_data = $mp3_data;

if ( $mp3_writter->WriteTags() ) {
$link = $sname ;
$shownUrl .= $timeFolder . $storeName;
} else {
unlink ( $sname );
$error .= "Failed To Write Tags!<br><br><em>" . implode( "<br><br>", $mp3_writter->errors ) . \'</em><br>\';
}
} else {
$error .= "Unable To Copy File";
}
}
}
}
?> <!DOCTYPE html> <html> 
<meta name="viewport" content="width=device-width, initial-scale=1" />
</html>


<?php if ( isset ( $link ) && ! empty ( $link ) ) { ?>
<div class="successbox">
File Uploaded Successfully
<p class="copy"><input type="text" value="<?php echo $shownUrl; ?>"></p>
</div>

<?php } else {  ?>
<?php if ( ! empty ( $error ) ) { ?>
<div class="error"><?php echo $error; ?></div>
<?php } ?>
<form method="post" action="<?php echo $_SERVER[\'REQUEST_URI\']; ?>">
<div>
<div class="dark1"><b><font size="2">Link</font><br></b>
<input type="text" name="url" value="<?php echo $_POST[\'url\']; ?>">
</div></div>

<div>
<div class="dark1"><b><font size="2">Title</font><br></b>
<input type="text" name="title" value="<?php echo $_POST[\'title\']; ?>">
</div>
</div>

<div>
<div class="dark1"><b><font size="2">Artiste</font><br></b>
<input type="text" name="artiste" value="<?php echo $_POST[\'artiste\']; ?>">
</div>

<div>
<div class="dark1"><b>Album<br></b>
<input type="text" name="album" value="Example.com">
</div>
<div>
<div class="dark1"><b>Producer<br></b>
<input type="text" name="producer" value="Example.com">
</div></div>
<div>

<div class="">
<input type="submit" name="submit" value="Upload">
</div>
</form></div>
<?php } ?>
<br />

</body>
</html>

1 个回复
SO网友:Tim

如果要在发布或编辑帖子时触发某些操作,可以查看save_postedit_post 行动。

您可以轻松地挂接编辑过程,在需要时修改帖子数据,然后再次保存。

function myplugin_save_post($post_id, $post) {
  // $post contains the post itself
  // so you can check the submitted data and see if you need to update it
  // $post->post_title is what you are looking for
  // call your script to get the music data
  // save the data in the wp_postmeta table so you can retrieve it later
}
add_action(\'edit_post\', \'myplugin_save_post\', 10, 2);
add_action(\'save_post\', \'myplugin_save_post\', 10, 2);

相关推荐

Php-在post-template.php中发出警告,并且不在页面上加载内容

我正在使用HTML5 Blank来创建我的网站。我想设计一些不同于其他页面的页面样式,因此为它们制作了一个页面模板。在这个页面模板中,我使用了以下内容:<?php the_content(); ?>这昨天做得很好。然后我今天醒来,现在相同的页面显示此错误,没有内容:警告:count():参数必须是在/home/insitvbt/treningsglad/wp includes/post模板中实现Countable的数组或对象。php在线317页面模板文件中的所有其他内容都可以正常加载,只是内容