サポート » 使い方全般 » funcsions.php→プラグイン化で500エラー

  • 解決済 gobylover

    (@gobylover)


    管理画面の投稿一覧に、記事の公開及び削除を1クリックで実現するボタンを実装しています。

    
    ~前略~
    
    function change_post_status($post_id,$status){
        $current_post = get_post( $post_id, 'ARRAY_A' );
        $current_post['post_status'] = $status;
        wp_update_post($current_post);
    }
    if (isset($_POST['fe_publish']) && $_POST['fe_publish'] == 'fe_publish'){
    	if (isset($_POST['pid']) && !empty($_POST['pid'])){
    		change_post_status((int)$_POST['pid'],'publish');
    	}
    }
    if (isset($_POST['fe_delete']) && $_POST['fe_delete'] == 'fe_delete'){
    	if (isset($_POST['pid']) && !empty($_POST['pid'])){
    		change_post_status((int)$_POST['pid'],'trash');
    	}
    }
    
    ~後略~
    

    別途JSで自分自身に公開(削除)フラグをポストし、そのフラグの存在をifで読み取って処理している部分です。

    上記コード、funcsions.phpへ記述した場合には正常に動きます。

    しかし、これを自作プラグインとして記述すると500エラーが出てしまいます(ソースコードは吐き出されています)

    以下のコードのみをfunctions.phpに戻したところ正常に動作したため、これをプラグインに記述することで何か悪さをしているのかと思うのですが、その先の解決策が全く思い当りません。

    どの様なことが起きてしまっているのでしょうか。。。?

    if (isset($_POST['fe_publish']) && $_POST['fe_publish'] == 'fe_publish'){
    	if (isset($_POST['pid']) && !empty($_POST['pid'])){
    		change_post_status((int)$_POST['pid'],'publish');
    	}
    }
    if (isset($_POST['fe_delete']) && $_POST['fe_delete'] == 'fe_delete'){
    	if (isset($_POST['pid']) && !empty($_POST['pid'])){
    		change_post_status((int)$_POST['pid'],'trash');
    	}
    }

    どうぞよろしくお願い致します。

8件の返信を表示中 - 1 - 8件目 (全8件中)
  • こんにちは、

    直接関係がありませんが、コアに 投稿を削除するリンクを取得する関数があります。

    多分、current_user_can()などと組み合わせて使うといいと思いますが、

    http://wpdocs.osdn.jp/%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%82%BF%E3%82%B0/get_delete_post_link

    そういう方法も併せて検討してみるといいかも、、、

    トピック投稿者 gobylover

    (@gobylover)

    >nobitaさん

    削除に関しては管理画面でもURLが存在していたので、関数がありそうな気がしていたのですが、やはりあったのですね。

    投稿の公開に関しては直接指示するURLがなさそうだったので、そのあたりが難しいところですね…

    こんにちは

    サーバーのログにエラーが出力されていると思います。
    確認できるようなら見てみてください。

    トピック投稿者 gobylover

    (@gobylover)

    >munyagu
    ロリポップのサーバー、PHPはモジュール版の7.1を利用しているのですが、どうも、エラーログは吐き出してくれない様です。。。

    wp-config.phpの
    WP_DEBUGをdefine(‘WP_DEBUG’, true);
    に変更しても表示されませんか?

    プラグインが機能しているかどうかはチェックしていませんが、

    PHP 7.1.1 の MAMP環境だとプラグインにしてもエラーでませんよ。
    コードは下記の感じです。

    で wp-content/plugins/test-test-test.php に保存。プラグイン test-test-test として見えるようになるので、これを有効化。

    <?php
    /*
    Plugin Name: test-test-test
    Plugin URI: 
    Description: TEST
    Version: 1.0
    Author: Hogege
    Author URI: 
    */
    
    function change_post_status($post_id,$status){
        $current_post = get_post( $post_id, 'ARRAY_A' );
        $current_post['post_status'] = $status;
        wp_update_post($current_post);
    }
    if (isset($_POST['fe_publish']) && $_POST['fe_publish'] == 'fe_publish'){
    	if (isset($_POST['pid']) && !empty($_POST['pid'])){
    		change_post_status((int)$_POST['pid'],'publish');
    	}
    }
    if (isset($_POST['fe_delete']) && $_POST['fe_delete'] == 'fe_delete'){
    	if (isset($_POST['pid']) && !empty($_POST['pid'])){
    		change_post_status((int)$_POST['pid'],'trash');
    	}
    }
    
    • この返信は6年、 9ヶ月前にkimipoohが編集しました。
    モデレーター Okamoto Hidetaka

    (@hideokamoto)

    プラグイン側でやるのであれば、何かしらのフックを通してやるほうが良いかもです。
    予期せぬタイミングでコードが実行されてエラーになっているという可能性もありそうですので。

    
    add_action( 'admin_init', function() {
    if (isset($_POST['fe_publish']) && $_POST['fe_publish'] == 'fe_publish'){
    	if (isset($_POST['pid']) && !empty($_POST['pid'])){
    		change_post_status((int)$_POST['pid'],'publish');
    	}
    }
    if (isset($_POST['fe_delete']) && $_POST['fe_delete'] == 'fe_delete'){
    	if (isset($_POST['pid']) && !empty($_POST['pid'])){
    		change_post_status((int)$_POST['pid'],'trash');
    	}
    }
    } );
    

    フックがこれであってるかもちょっと確信はないですが、この書き方で500エラーがでなくなったとすれば
    テーマとプラグインでのコードの実行タイミングの違いによるものかと思います。

    トピック投稿者 gobylover

    (@gobylover)

    >Okamoto Hidetakaさん
    ありがとうございます!

    提案して頂いた通りのコードで上手く動きました!

    >gogowebさん、kimipoohさん
    アイデアを出して頂いてありがとうございました!

8件の返信を表示中 - 1 - 8件目 (全8件中)
  • トピック「funcsions.php→プラグイン化で500エラー」には新たに返信することはできません。