こんにちは〜私は再び戻ってきており、私は取り組んでいたスクリプトに別の機能を追加しようとしています それらに言及した新しい投稿を友達に知らせるプラグイン 。今度は私が出版した後私が私の友人の名前の平文を彼ら自身のワードプレスのブログアドレス(もしあれば)へのリンクに変更したい。 @Davidは David になります。
この質問を何度も検索しますが、結果はすべて次のようになります。
add_filter('the_content', 'replace_custom_Word');
データベースを実際には変更しません。編集:私は知りません、多分私は間違っています。
以下は、Davidのブログアドレスを取得するために使用するコードです。
$friend_url = $wpdb->get_var( $wpdb->prepare( "
SELECT comment_author_url
FROM $wpdb->comments
WHERE comment_author
LIKE %s ",
$friendCorrectName
)) ;
それでは、これを実行するための最良の方法は何ですか。どうもありがとうございました。
このスクリプトの完全なコードも下に貼り付けられています。今私が持っていることについてもコメントしてください。 :)あなたは私の 最後の投稿をチェックアウトすることができます あなたが変なものを見た場合、またはあなたは私に尋ねることができます。
function email_friend() {
// get post object
$post = get_post($id);
// get post content
$content = $post->post_content;
// get how many people is mentioned in this post
$mentionCount = preg_match_all('/(@[^\s]+)/', $content, $matches);
// if there is at least one @ with a name after it
if (0 !== $mentionCount) {
$friendList = array();//for storing correct names
for ($mentionIndex=0; $mentionIndex < $mentionCount; $mentionIndex++) {
$mentionName = $matches[0][$mentionIndex];
$mentionName = str_replace('_',' ',$mentionName); //change _ back to space
$mentionName = substr($mentionName, 1); //get rid of @
//for security and add wildcard
$friend_display_name_like = '%' . like_escape($mentionName) . '%';
global $wpdb;
// get correct name first
$friendCorrectName = $wpdb->get_var( $wpdb->prepare( "
SELECT comment_author
FROM $wpdb->comments
WHERE comment_author
LIKE %s ",
$friend_display_name_like
)) ;
// get friend email by comment author name
$friend_email = $wpdb->get_var( $wpdb->prepare( "
SELECT comment_author_email
FROM $wpdb->comments
WHERE comment_author
LIKE %s ",
$friendCorrectName
)) ;
// get friend's blog address
$friend_url = $wpdb->get_var( $wpdb->prepare( "
SELECT comment_author_url
FROM $wpdb->comments
WHERE comment_author
LIKE %s ",
$friendCorrectName
)) ;
//if we have David's blog address in database
if ($friend_url) {
//this is where I need help with.
//I need to modify post content before writing it into database now
//I need to change the plain text name after @ to a link to his blog
}
if($friend_email) {// if found email address then email
$postTitle = get_the_title($id);
$post_permalink = get_permalink( $id );
$to = $friend_email;
$subject = 'Arch!tect mentioned you in his new post 《'.$postTitle .
'》';
$from = "[email protected]";
$headers = "From:" . $from;
$message = "Arch!tect mentioned you in his new post《".$postTitle .
"》 check it out?\n\n" ."Post link:".$post_permalink
."\n\n\nPlease don't reply this email.\r\n";
if(mail($to, $subject, $message, $headers)) {
//if send successfully put his/her name in my list
array_Push($friendList, $friendCorrectName);
}
}
}
$comma_separated_list = implode(",", $friendList); //friend list array to string
// now send an email to myself about the result
$postTitle = get_the_title($id);
$post_permalink = get_permalink( $id );
$to = '[email protected]';
$subject = "Your new post《".$postTitle .
"》has notified ".count($friendList)."friends successfully";
$from = "[email protected]";
$headers = "From:" . $from;
//list all friends that received my email
$message = "Your new post《".$postTitle .
"》has notified ".count($friendList)."friends successfully:\n\n".
$comma_separated_list;
mail($to, $subject, $message, $headers);
}
}//end of email_friend function
add_action ( 'publish_post', 'email_friend' );
EDIT2:より具体的に言うと、上記のコード「//これは手助けが必要です。」とコメントした箇所は、手助けが必要な場所です。
通常は情報を表示する前にadd_filter
を使用します。あなたの場合はadd_action('publish_post', 'your_function')
を使用してから$_POST
値を傍受することができます。 WYSIWYGエディタの内容は$_POST['content']
を通して利用可能です。
フックは publish_{post_type}
btw型です。それに応じて変更する必要があります。
例:
function wpse_89292_save_my_post()
{
print_r( $_POST['content'] ); # will display contents of the default wysiwyg editor
die;
}
add_action('publish_post', 'wpse_89292_save_my_post');
wp_insert_post_data
フィルタを使う:
function wpse_89292_save_my_post( $content ) {
global $post;
if( isset($post) && get_post_type( $post->ID ) == 'post' ){
$content['post_content'] = function_to_manipulate_the_content();
}
return $content;
}
add_filter( 'wp_insert_post_data', 'wpse_89292_save_my_posts' );
多分あなたはあなたが投稿に欲しいものを編集するために wp_update_post (あなたが投稿を編集しているなら)または wp_insert_post (それが新しい投稿であれば)関数を使うことができます。それは実際に動作します。