Calling hooks in functions

时间:2019-04-17 作者:staffsdesigner

我习惯于使用主题挂钩,定期添加功能,但难以使用插件挂钩来过滤内容。这是我所知的极限,我试图理解这个过程,但没有用。

我正在使用GigPress 管理事件。它允许您添加一个节目(基于日期),并将该节目与帖子(标准WP帖子)关联。

我已经创建了一个自定义的帖子类型—productions—来关联节目,而不仅仅是一般的博客帖子。

插件有一个钩子-gigpress_related_post_types —允许您用自己选择的任何CPT交换帖子。

如果我直接编辑插件,它就会工作,将“帖子”替换为“产品”。如果我添加了我希望是正确的函数,它不会破坏任何东西,而是可以选择所有帖子和帖子类型。建议我重写默认行为,但错误地调用我的函数?

示例插件代码:

<?php
$related_posts_sql = "SELECT p.ID, p.post_title FROM " . $wpdb->prefix . "posts p WHERE (p.post_status = \'publish\' OR p.post_status = \'future\')";
/**
 * Provides an opportunity to specify other post types as related posts
 *
 * @param array $related_post_types
 *
 * @since 2.3.19
 */

$related_post_types = apply_filters(\'gigpress_related_post_types\', [\'post\']);
if (!empty($related_post_types)) {
  $related_posts_sql .= "AND p.post_type IN( \'" . implode("\',\'", $related_post_types) . "\' )";
}

$related_posts_sql .= " ORDER BY p.post_date DESC LIMIT 500";

$entries = $wpdb->get_results($related_posts_sql, ARRAY_A);
if ($entries != FALSE) {
  foreach ($entries as $entry) { ?>
    <option
      value="<?php echo $entry[\'ID\']; ?>"<?php if (isset($show_related) && $entry[\'ID\'] == $show_related) {
      echo(\' selected="selected"\');
      $found_related = TRUE;
    } ?>><?php echo gigpress_db_out($entry[\'post_title\']); ?></option>
  <?php }
}
完整插件新显示文件:https://codeshare.io/50MKJg

我所建议的众多函数之一的一个示例是:

add_filter( \'gigpress_related_post_types\', array( \'productions\' ) ); if ( ! empty( $related_post_types ) ) { $related_posts_sql .= "AND p.post_type IN( \'" . implode( "\',\'", $related_post_types ) . "\' )"; }
理想情况下,我还想提供两个CPT来代替“post”-“productions”和“projects”。

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

你在正确的道路上add_filter, 但这是实现过滤器的正确方法。

add_filter( \'gigpress_related_post_types\', \'my_related_post_types\' ); 
function my_related_post_types( $post_types ) {
    return array( \'productions\' );
}
钩子add_filter 必须调用返回要传递给apply_filters 在您引用的代码中。

您应该添加任何需要的逻辑来返回正确的post类型,并处理默认的post类型。例如:

add_filter( \'gigpress_related_post_types\', \'my_related_post_types\' ); 
function my_related_post_types( $post_types ) {
    // Assuming you set an option to control which post types should be used.
    $custom_gig_post_types = get_option( \'gig_post_types\', false );
    if ( $custom_gig_post_types ) {
        return $custom_gig_post_types;
    }
    return $post_types;
}

相关推荐

Functions.php上未定义$_GET和&_REQUEST索引

我最近尝试学习为我的自定义主题创建一个主题选项页面,这是按照stackoverflow和其他资源的教程进行的。但脚本显示错误if ($_GET[\'page\'] == basename(__FILE__)) { if (\'save\' == $_REQUEST[\'formaction\']) { foreach ($options as $value) { if( isset( $_REQUEST[ $value[\'id\']