将URL字段添加到链接帖子格式

时间:2013-09-23 作者:Michał Pękała

我正在建立一个博客,其中95%的帖子将采用“链接”帖子格式。

我想在添加新的“链接”帖子时明确指定URL。在标题和内容之间的单独字段中。(默认情况下,不作为内容的第一个链接,而作为第十三个链接)

实现这一目标的最佳方式是什么?

1 个回复
最合适的回答,由SO网友:gmazzap 整理而成

在Twentyree主题中,使用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() 要获取内容中的第一个链接并显示它(如果有),如果没有,则显示post permalink。

不太可能,这些函数没有对结果进行筛选,因此要更改此行为,您有两个选项:

编辑主题文件创建子主题建议的解决方案是第二种。在里面wp-content/themes 文件夹创建名为twentythirteen-child 里面放了两个文件。第一个是style.css 可以只包含所需内容:

/*
 Theme Name:     Twenty Thirteen Child
 Author:         You
 Template:       twentythirteen
*/

@import url(\'../twentythirteen/style.css\');
现在转到您的仪表板,找到这个新创建的子主题并激活它。访问该站点时,您不会看到任何更改。

现在复制content-link.php 文件从Twentythine主题文件夹保存到您的子主题文件夹。找到我在上面发布的代码(应该是第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\' 用于显示字段的操作挂钩和用于保存字段的“save\\u post”挂钩。

在显示字段时,请确保帖子类型为“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);
  }
}
预览或您将获得的内容:

preview

现在,您可以自定义content-link.php 在您的孩子主题中,根据您的需要。

当Twentyree获得更新时,您可以毫不担心地进行更新:您的更改在子主题中是安全的。

结束

相关推荐

Admin Theme customization

我遵循wordpress codex网站上关于通过插件创建管理主题的说明。我激活了插件,但我的样式表没有包含在<head>.. 这是我的代码:add_action( \'admin_init\', \'kd_plugin_admin_init\' ); add_action( \'admin_menu\', \'kd_plugin_admin_menu\' ); function kd_plugin_admin_init() { /* Register