2016-05-15 14 views
0

私はこの問題で数日間苦労しています。フロントエンドのカスタム投稿投稿結果がwp_insert_post()で定義されていません

'/ WP-コンテンツ/プラグイン/私のクール・プラグイン':

私はに位置しているプラ​​グインを、作成しました。

私のプラグインを使用すると、ユーザーはパブリックページのフォームを使用してカスタム投稿タイプを投稿できますが、基本的に誰かが何かを投稿できるはずです。 jQueryを使用して、フロントエンドフォームが送信されたときに聴いて、Ajaxを使用してフォームからデータをPHPファイルに渡してポストに処理します。 このファイルの場所は

'/wp-content/plugins/my-cool-plugin/inc/processor.php'です。私は自分のフォームをテストするとき、それは次のようなエラーになり

$var1= $_POST['some']; 
$var2= $_POST['data']; 

$new_post = array(
    'post_type'   => 'my_custom_post', 
    'post_status'  => 'publish', 
    'mcp_1'    => $var1, 
    'mcp_2'    => $var2 
); 

$post_id = wp_insert_post($new_post, $wp_error); 
if ($wp_error == 'false'){ 
    $post_url = get_permalink($post_id); 
    echo $post_url; 
}else { 
    // some sort of error 
} 

:以下

は私のプロセッサフ​​ァイルの内容である

コール未定義の関数wp_insert_postに()ライン上の...どの

$post_id = wp_insert_post($new_post, $wp_error); 

私はワードプレスの「スコープ」にいないので、何かを含める必要がありますか? フロントエンドフォームからカスタム投稿を挿入する別の(はるかに良い)方法がありますか?

require(dirname(__FILE__) . '/wp-load.php'); 

答えて

0

ニックの答えを処理するのに時間がかかりましたが、ついにそれが効きました!ニックは言ったように、私はWordPressの範囲外だったので、プロセスファイルを使用して落とした。 Nickが提案したように、自分の投稿を自分のprocesファイルからプラグインのinitファイル(my-cool-plugin.php)の新しい関数に移動しました。これは、次の新しい関数の結果:

add_action('wp_ajax_coolplugin_create_post', 'coolplugin_create_post'); 
add_action('wp_ajax_nopriv_coolplugin_create_post', 'coolplugin_create_post'); 

function coolplugin_create_post() { 
    $var1 = $_POST['some']; 
    $var2 = $_POST['data']; 

    $new_post = array(
     'post_type'   => 'my_custom_post', 
     'post_status'  => 'publish' 
     'post_title'  => 'Some title' 
    ); 

    $post_id = wp_insert_post($new_post, $wp_error); 

    // check if there is a post id and use it to add custom meta 
    if ($post_id) { 
     update_post_meta($post_id, 'mcp_1', $var1); 
     update_post_meta($post_id, 'mcp_2', $var2); 
    } 

    if ($wp_error == false){ 
     $post_url = get_permalink($post_id); 
     echo $post_url; 
    }else { 
     // some sort of error 
    } 
} 

私もwp_insert_post()機能は、デフォルトのポストのパラメータを受け入れるので、私は、新しく作成されたポストに私のカスタム値を挿入する方法を変更する必要がありました(これらのパラメータのwp_insert_post documentationを参照してください) 。

私のinsert/create post関数の次に、自分のフォームから入力されたデータを取得するjavascriptファイルをいくつか調整しなければなりませんでした。私は、URLを使用することができるよ頭にcoolPluginAjaxUrl変数を追加することにより

function your_plugin_ajaxurl() { ?> 
    <script type="text/javascript"> 
     var coolPluginAjaxUrl = "<?php echo admin_url('admin-ajax.php'); ?>"; 
    </script> 
<?php } 

add_action('wp_head','your_plugin_ajaxurl'); 

:(ニックが示唆したように)そこで私はこのようなmy-cool-plugin.phpに次の関数を追加することによって、JSにPHPから私のAjaxのURLを渡すために必要な私はJavaScriptで次のように、私のフォームが送信されたときにデータを投稿する:

$('#form').on('submit', function(e) { 
    var request; 

    e.preventDefault(); 
    var val_one = $('#val-one').val(); 
    var val_two = $('#val-two').val(); 

    var formData = { 
     action: 'coolplugin_create_post', 
     some: val_one, 
     data: val_two, 
    }; 

    request = $.ajax({ 
     type: 'POST', 
     url: coolPluginAjaxUrl, 
     data: formData, 
    }); 
}); 

formDataはPHPで定義されたcoolplugin_create_postアクションを保持し、要求が頭の中で定義されてcoolPluginAjaxUrl URLに掲載されています。

ありがとうニック私を正しい方向に向けると私のソリューションはまた他の人に役立つことを願っています。コードの仕組みを簡単に理解できるように、他の人にはいくつかのセキュリティ対策のコードを削除しました。

0

みては?それは実用的ではありません。代わりに、あなたはwordpressの範囲とユーザーのwordpressネイティブajaxでそれを実行することができます。

add_action('wp_ajax_yourplugin_create_post', 'yourplugin_create_post'); 
add_action('wp_ajax_nopriv_yourplugin_create_post', 'yourplugin_create_post'); 

function yourplugin_create_post() { 
// your code here 
} 

次に、あなたがjsのためにPHPから渡されるあなたのAJAXのURLが必要になります

function your_plugin_ajaxurl() { 
?> 
<script type="text/javascript"> 
var yourPluginAjaxUrl = "<?php echo admin_url('admin-ajax.php'); ?>"; 
</script> 
<?php 
} 

add_action('wp_head','your_plugin_ajaxurl'); 

次に、あなたのAJAX要求を使用することができますが、アクションを示すために必要があるでしょう:yourplugin_create_postとURL = yourPluginAjaxUrl

+0

私のファイルはWordPressのスコープにはないので、 'wp-load.php'ファイルは' wp-load.php'ファイルを必要とするファイルのフォルダで探しています。私の '/ wp-content/plugins/my-cool-plugin/inc /'フォルダ内の 'wp-load.php'を探す必要があることを意味します。 – Tomjesch

1

なぜあなたは、ワードプレスのスコープの外のファイルを実行しているの追加

+0

こんにちはニック、お返事ありがとうございます。それは私の答えを見つけることに私を助けた! – Tomjesch

関連する問題