私は、95%の投稿が「リンク」の投稿形式になるブログを作成しています。
新しい "リンク"投稿を追加するときに、URLを明示的に指定したいのですが。タイトルとコンテンツの間の別のフィールドにあります。 (デフォルトではTwenty 13とは異なり、コンテンツからの最初のリンクとはみなされません)
それを達成するための最良の方法は何ですか?
12テーマでは、投稿フォーマットのリンクはcontent-link.php
ファイルを使用して表示されます。リンクを表示する部分は次のとおりです。
<h1 class="entry-title">
<a href="<?php echo esc_url(twentythirteen_get_link_url());?>"><?php the_title(); ?></a>
</h1>
そのため、リンクはtwentythirteen_get_link_url()
を使って表示されます。この関数はwp関数get_url_in_content()
を使ってコンテンツ内の最初のリンクを取得し、もしあればそれを表示し、そうでなければ投稿のパーマリンクを表示します。
めったにありませんが、これらの関数には結果に対するフィルタがないため、この動作を変更するには2つの選択肢があります。
提案された解決策は2番目です。 wp-content/themes
フォルダーにtwentythirteen-child
という名前のフォルダーを作成し、その中に2つのファイルを置きます。 1つ目は、必要なコンテンツだけを含めることができるstyle.css
です。
/*
Theme Name: Twenty Thirteen Child
Author: You
Template: twentythirteen
*/
@import url('../twentythirteen/style.css');
今すぐあなたのダッシュボードに行き、この新しく作成された子テーマを見つけてそれをアクティブにします。サイトにアクセスしても変化はありません。
次に、content-link.php
ファイルを13個のテーマフォルダからあなたの子テーマフォルダにコピーします。上記で投稿したコードを見つけます(13〜15行目)。
これと取り替えて下さい:
<h1 class="entry-title">
<?php $link = get_post_meta( get_the_ID(), '_my_custom_link', true); ?>
<a href="<?php echo $link ? esc_url($link) ? esc_url(twentythirteen_get_link_url()); ?>">
<?php the_title(); ?>
</a>
</h1>
それを保存。
これで、非表示のカスタムフィールド'_my_custom_link'
を投稿に追加できます。これは投稿のURLとして使用されます。
隠しフィールド(キーは'_'
で始まります)なので、通常はメタボックスを追加していますが、投稿編集画面のタイトルの後に表示したい場合は、'edit_form_after_title'
アクションフックを使用してフィールドを表示し、それ。
フィールドを分割するときは、投稿タイプが 'post'で、投稿フォーマットが空(新規投稿または投稿フォーマットなし)か 'link'と等しいことを確認してください。
そのため、新しく作成した子テーマにfunctions.php
ファイルを追加し、このファイルに次の行を追加します。
add_action('edit_form_after_title', 'my_url_form_field');
add_action('save_post', 'my_url_form_field_save');
function my_url_form_field( $post ) {
if ( $post->post_type != 'post') return;
$format = get_post_format($post->ID);
if ( ! empty($format) && ($format != 'link') ) return;
?>
<div id="urlwrap">
<p>
<label for="post-link-url"><strong>URL:</strong></label>
<input type="text" class="large-text" name="_my_custom_url" size="30" value="<?php echo get_post_meta($post->ID, '_my_custom_url', true); ?>" id="post-link-url" autocomplete="off" />
</p>
</div>
<?php
}
function my_url_form_field_save( $postid ) {
if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE );
if ( isset($_POST['_my_custom_url']) ) {
if (( strpos($_POST['_my_custom_url'], 'http://') !== 0 ) && (strpos($_POST['_my_custom_url'], 'https://') !== 0 ))
$_POST['_my_custom_url'] = 'http://' . $_POST['_my_custom_url'];
$url = filter_var($_POST['_my_custom_url'], FILTER_VALIDATE_URL) ? $_POST['_my_custom_url'] : '';
update_post_meta($postid, '_my_custom_url', $url);
}
}
プレビューまたはあなたが得るもの:
これでうまくいったので、必要に応じて子テーマのcontent-link.php
をカスタマイズできます。
12人が更新を入手したとき、あなたはそれを恐れずに更新することができます:あなたの変更は子供のテーマで安全です。