WordPressフックに問題があります。アクションを別のアクションコールバックで呼び出したいのですが、うまくいかないようです。ページが保存されている場合にのみadd_meta_tag
アクションを呼び出したいです。これは私が持っているものです:
function saveCustomField($post_id)
{
add_action( 'wp_head', 'add_meta_tag' );
}
add_action( 'save_post', 'saveCustomField' );
function add_meta_tag(){
echo "TEST";
}
上記を正しく動作させるにはどうすればよいですか?
あなたはこれが全く間違っていると考えています。メタタグは、投稿が保存されたときに追加するものではなく、投稿が 閲覧済み のときに出力に追加されるものです。
そのため、アクションをsave_post
の内側にフックしようとする代わりに、あなたはそれをページがロードされるたびにフックし、そして inside あなたのカスタムフィールドが表示されている投稿に存在するかチェックします。もしそうなら、あなたはタグを出力します。
function wpse_283352_add_meta_tag() {
if ( is_singular() {
$post_id = get_queried_object_id();
$meta = get_post_meta( $post_id, '_my_custom_field', true );
if ( $meta ) {
echo '<meta name="my_custom_field" content="' . esc_attr( $meta ) . '">';
}
}
}
add_action( 'wp_head', 'wpse_283352_add_meta_tag' );
その関数は他のフックの中ではなく、単にあなたのプラグインファイル/ functionsファイルの中に入ります。
save_post
フックは、データがデータベースに保存された後(投稿またはページが作成または更新された場合は常に) - 管理ページでのみ起動されます。
wp_head
フックはwp_head()
関数が実行されたときに起動し、これは管理者ページでは起こりません。
これはうまくいきません。いつどこでメタタグを追加しますか。
簡単に言うと、できません。
コードは問題ありませんが、ロジックに問題があります。 wp_head
アクションが遅すぎます。ヘッダはすでに送信されているので、wp_head
は起動しません。以下のこのコードは、2つの点を証明します。最初:save_post
は管理ページとフロントエンドの両方で起動します。第二に:コールバック関数で無限ループを防ぐのは簡単です。
functions.php
内:
function saveCustomField($post_id) {
// to prevent an infinite loop
remove_action('save_post', 'saveCustomField', 10);
// to prove that function was called
error_log('I am here to add action');
add_action('wp_head', 'add_meta_tag');
}
add_action('save_post', 'saveCustomField');
function add_meta_tag(){
error_log('TEST');
//echo "TEST";
}
私のページテンプレート(フロントエンド):
wp_update_post(array('ID' => 79, 'post_title' => 'My Current Test',));
Error_log内:
[19-Oct-2017 02:57:08 UTC] I am here to add action
私の投稿のタイトルは更新され、save_post
は解雇され、wp_head
はそうではありませんでした。
公開/更新ボタンが押されたときにメタタグを追加したいです。メタページを追加/削除する管理ページにチェックボックスがあります。情報としては、プラグインを対象としています。
function saveCustomField($post_id)
{
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
return;
}
if (
!isset($_POST['my_custom_nonce']) ||
!wp_verify_nonce($_POST['my_custom_nonce'], 'my_custom_nonce_'.$post_id)
) {
return;
}
if (!current_user_can('edit_post', $post_id)) {
return;
}
if (isset($_POST['_my_custom_field'])) {
update_post_meta($post_id, '_my_custom_field', $_POST['_my_custom_field']);
// here
// >>>>> add_action('wp_head', 'add_meta_tag');
} else {
delete_post_meta($post_id, '_my_custom_field');
}
}
add_action( 'save_post', 'saveCustomField' );
function add_meta_tag(){
echo "TEST";
}